关于逃避单引号和双引号有很多问题,但我没有找到解决我特定问题的答案。
我有一个PHP函数,它动态地返回一个带有onClick事件的图像,该事件调用一个Javascript函数,其中一个对象的名称作为参数,如下所示:
$response = "<img src=\"images/action_delete.gif\" onClick=\"confirmDelete("'" . $event->getName() . "'")\"/>"";
Javascript函数应该在某个时刻显示确认对话框:
confirm('Delete event ' + name + ' ?')
如何在PHP中格式化$ response以确保当用户输入包含'或'或\'或\“的名称时,Javascript确认不会搞砸?
答案 0 :(得分:8)
你可以使用htmlspecialchars或htmlentities转义php中的任何引号,但这并不能解决单引号的问题,即使设置了ENT_QUOTES也是如此。
进行一些测试我发现以下内容应该可行,但可能不是很优雅:
$name = htmlentities(str_replace("'", "\'", $event->getName()));
$response = "<img src=\"images/action_delete.gif\" onClick=\"confirmDelete('" . $name . "')\"/>";
希望有所帮助
答案 1 :(得分:2)
使用json_encode()
处理字符串。这将确保它是一个有效的JavaScript表达式。
答案 2 :(得分: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>
答案 3 :(得分:0)
如果输入字符串中有单引号,双引号,斜杠和反斜杠,则另一种解决方案对我有用:
$output = htmlentities(str_replace(array(chr(92), "'"), array(chr(92) . chr(92), "\'"), $input));
有类似的东西:
onClick=\"confirmDelete('" . $output . "')\"
感谢nicja!