繁体   English   中英

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

[英]How to escape quotes and already escaped quotes in PHP before passing to Javascript?

关于转义单引号和双引号有很多问题,但是我没有运气找到解决我特定问题的答案。

我有一个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!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM