1

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

我有一个 PHP 函数,它动态返回一个带有 onClick 事件的图像,该事件调用一个 Javascript 函数,并将对象的名称作为参数,如下所示:

$response = "<img src=\"images/action_delete.gif\" onClick=\"confirmDelete("'" . $event->getName() . "'")\"/>"";

Javascript 函数应该在某些时候显示一个确认对话框,如下所示:

confirm('Delete event ' + name + ' ?')

我应该如何在 PHP 中格式化 $response 以确保当用户输入包含 ' 或 " 或 \' 或 \" 的名称时 Javascript 确认不会搞砸?

4

4 回答 4

8

您可以使用 htmlspecialchars 或 htmlentities 转义 php 中的任何引号,但这并不能解决单引号问题,即使设置了 ENT_QUOTES 也是如此。

做一些测试我看到以下应该可以工作,虽然它可能不是很优雅:

$name = htmlentities(str_replace("'", "\'", $event->getName()));
$response = "<img src=\"images/action_delete.gif\" onClick=\"confirmDelete('" . $name . "')\"/>";

希望有帮助

于 2011-04-13T10:07:27.530 回答
2

使用 处理字符串json_encode()。这将确保它是一个有效的 JavaScript 表达式。

于 2011-04-13T09:46:18.967 回答
2

非常安全的替代方案,还免费为您提供手形光标

<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>
于 2011-04-13T09:51:52.670 回答
0

如果您的输入字符串中有单引号、双引号、斜杠和反斜杠,另一种解决方案对我有用:

$output = htmlentities(str_replace(array(chr(92), "'"), array(chr(92) . chr(92), "\'"), $input));

有类似的东西:

 onClick=\"confirmDelete('" . $output . "')\"

感谢妮佳!

于 2014-03-15T15:15:23.423 回答