在传递给Javascript之前,如何在PHP中转义引号和已经转义的引号?

| 关于转义单引号和双引号有很多问题,但是我没有运气找到解决我特定问题的答案。 我有一个PHP函数,该函数动态返回一个带有onClick事件的图像,该事件调用一个以对象名称作为参数的Javascript函数,如下所示:
$response = \"<img src=\\\"images/action_delete.gif\\\" onClick=\\\"confirmDelete(\"\'\" . $event->getName() . \"\'\")\\\"/>\"\";
Javascript函数应在如下所示的位置显示确认对话框:
confirm(\'Delete event \' + name + \' ?\')
当用户输入包含\'或\“或\\\'或\\\”的名称时,如何在PHP中格式化$ response以确保Javascript确认不会弄乱?     
已邀请:
您可以使用htmlspecialchars或htmlentities来转义php中的任何引号,但是即使设置了ENT_QUOTES,这也不能解决单引号的问题。 进行一些测试,我看到以下内容应该可以工作,尽管可能不太好:
$name = htmlentities(str_replace(\"\'\", \"\\\'\", $event->getName()));
$response = \"<img src=\\\"images/action_delete.gif\\\" onClick=\\\"confirmDelete(\'\" . $name . \"\')\\\"/>\";
希望能有所帮助     
使用
json_encode()
处理字符串。这样可以确保它是有效的JavaScript表达式。     
非常安全的选择,它也免费为您提供手形光标
<script> 
function confirmDelete(idx) {
  if (confirm(document.getElementById(\"msg\"+idx).innerHTML)) {
    location=\"delete.php?idx=\"+idx;   
  }   
  return false 
}
<span id=\"msg1\" style=\"display:none\"><?PHP echo $event->getName(); ?></span> 
<a href=\"#\" onClick=\"return confirmDelete(1)\"><img src=\"images/action_delete.gif\" style=\"border:0\" /></a>
    
如果您在输入字符串中使用单引号,双引号,斜杠和反斜杠,则另一种解决方案对我有用:
$output = htmlentities(str_replace(array(chr(92), \"\'\"), array(chr(92) . chr(92), \"\\\'\"), $input));
与类似:
 onClick=\\\"confirmDelete(\'\" . $output . \"\')\\\"
感谢nicja!     

要回复问题请先登录注册