在PHP中转义Javascript


Escaping Javascript in PHP

我正在寻找在PHP中转义一些Javascript文本的最佳方法,json_encode是这项工作的错误工具。

问题来自这一行:

echo " onclick='"SwitchDiv('" . $option . "')'"";
如果$option中有一个撇号,这是一个客户端失败的多汁球。 但是做一个直接的json_encode(在其他情况下效果很好)并没有帮助:
echo " onclick='"SwitchDiv(" . json_encode($option) . ")'"";
这将创建一个onclick="SwitchDiv("athlete's foot")"的输出字符串,导致onclick值过早终止。 (如果我将onclick值括在单引号中,也会发生这种情况。

有没有一种优雅的方法可以解决这个问题? 我是否应该通过转义单引号的正则表达式将json_encode输出漏斗?

json_encode是适合这项工作的工具。您的问题源于您还将该 Javascript 包含在 HTML 属性中的事实,因此它也需要进行htmlspecialchars编码。

echo " onclick='"SwitchDiv(" . htmlspecialchars(json_encode($option)) . ")'"";