php htmlspecialchars_decode() 问题

php htmlspecialchars_decode() issue

我有一个小问题。我需要在 $CmdExe = 'nircmd 运行 之前立即获取 htmlspecialchars_decode 到 运行,因为它会干扰,因为它不会正确执行。所以基本上我需要 $PlayMovie 在继续之前已经有一个解码值。我怎样才能使这项工作?我使用 php 桌面,nircmd 根据需要在 PC 上执行功能。除非名称在数据库中具有特殊字符,例如 ',否则它会很好用。使用 htmlspecialchars 将所有特殊字符放入数据库。 nircmd 仍然看到未解码的值,所以我需要在它到达此行之前解码这些值。还是已经解码了?我问是因为当我测试没有编码值的 $PlayMovie 变量时它工作正常。我知道不寻常的问题,但是我的 php 技能仍处于初学者阶段。非常感谢。

$results = $db->query("SELECT * FROM Movies WHERE id = '$RecID'");

while($row = $results->fetchArray()) {

$MovieFile = $row["FileName"];

$PlayMovie = htmlspecialchars_decode($MovieFile);

//NEEDS TO BE DECODED BEFORE THIS LINE
$CmdExe = 'nircmd.exe shexec "open" "'. $MovieHostDrive . $PlayMovie .'"';

exec($CmdExe);

}

经过进一步测试,当我执行 str_replace 时它起作用了。那么 htmlspecialchars_decode 是不是不起作用?

 //This Works
 $PlayMovie = str_replace("'", "'", $MovieFile);

//This doesn't
$PlayMovie = htmlspecialchars_decode($MovieFile);

在您使用的过程中,将数据库输出插入到 php 声明中,您需要转义 qoute 直到它到达。替换字符串在声明中起作用会很奇怪,因为单引号后的其他部分会进入 php 区域并导致某种语法错误。但是,如果您需要执行上面的代码,您可以在转换单引号时使用反斜杠字符 \ 对其进行转义。

所以改变这个:

      $PlayMovie = str_replace("'", "'", $MovieFile)

对此:

       $PlayMovie = str_replace("'", "\'", $MovieFile);

那么这一行就可以了,因为单引号在php中被转义了,但是修饰符会在php执行变量的时候去掉。就像 html 代码。

     $CmdExe = 'nircmd.exe shexec "open" "'. $MovieHostDrive . $PlayMovie .'"';