php htmlspecialchars_decode()问题

php htmlspecialchars_decode()问题,php,htmlspecialchars,Php,Htmlspecialchars,我有个小问题。我需要让htmlspecialchars_decode在$CmdExe='nircmd运行之前立即运行,因为它会干扰,因为它无法正确执行。所以基本上我需要$PlayMovie在继续之前已经有一个解码值。我怎样才能做到这一点?我使用php桌面,nircmd根据需要在PC上执行函数。在名称在数据库中有一个特殊字符(如&039;)之前,它工作得很好;。所有使用htmlspecialchars放入数据库的特殊字符。nircmd仍然看到未编码的值,所以我需要在它到达这一行之前解码这些值。还是

我有个小问题。我需要让htmlspecialchars_decode在$CmdExe='nircmd运行之前立即运行,因为它会干扰,因为它无法正确执行。所以基本上我需要$PlayMovie在继续之前已经有一个解码值。我怎样才能做到这一点?我使用php桌面,nircmd根据需要在PC上执行函数。在名称在数据库中有一个特殊字符(如&039;)之前,它工作得很好;。所有使用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);

}
经过进一步测试,当我做一个stru_替换它的工作。那么htmlspecialchars_解码不起作用了吗

 //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 .'"';

无论文件名是否包含引号(在存储之前应该去掉引号),您都应该使用它,而且必须不带\因为nircmd正在执行该字符串,而不是php。PHP只是启动nircmd,然后nircmd接管并启动其余部分。转义字符串将在内置命令exec中删除,但有一件事让我想知道,为什么不使用escapeShellarge nircmd.exe之外的任何东西都与PHP无关。这只供nircmd使用。PHP桌面可以做一些传统PHP无法做的事情。看一看。是的,但是在使用execute命令执行之前,它是在php中运行的,因此有人可以在其中插入.dir',并显示目录或在linux中的ls等操作系统上运行的任何其他行命令。这就是为什么在存储之前使用escapeshellarg添加转义字符,并且解码是透明的,不需要解码例程。它在本地运行。它离互联网和公众都很远。在本例中,目录是否作为其用户的个人目录公开并不重要。它作为桌面应用程序运行