在PHP中,我希望在某个时刻更改名为“menu”的DIV的内容。 在PHP中,我执行以下操作:
echo "<script> document.getElementById(\"menu\").innerHTML = \"NewContent\"; </script>";
它完美无缺。 然后,事情变得更加复杂,我有一个“创建”HTML的功能,如下所示:
function createNewDiv() {
$o = "<a href=\"example.html\">Click 'here'</a>";
$o. = "<i onclick=\" $(\"#maindiv\").load('another.php'); return false; \">XXX</i>";
$o .= "<b>... and much, much more...</b>";
return $o;
}
在页面的另一个区域,我这样做:
echo createNewDiv();
它打印得很好,没有任何语法错误。
如果我现在尝试做这样的事情:
echo "<script> document.getElementById(\"menu\").innerHTML = \"".createNewDiv()."\"; </script>";
由于字符串被某些引号/双引号“某处”中断,它停止使用某些语法错误(来自浏览器)。
我想我必须以某种方式逃避引号/双引号,我尝试使用addslashes()
但它没有用。
然后我意识到我只需要逃避双引号,所以我做了
$escaped = str_replace("\"", "\\\"", createNewDiv());
echo "<script> document.getElementById(\"menu\").innerHTML = \"$escaped\"; </script>";
但它仍然不起作用!我知道这是一个截断的字符串,但不幸的是我无法访问源代码,因为它位于AJAX更新的div中,浏览器只显示主页面。
我只是疯狂思考第一个函数输出,进入str_replace,然后进入innerHTML,然后由PHP打印,然后由浏览器解释......我迷失了“哪里”引号应该被转义; )
答案 0 :(得分:0)
您在:
中嵌套了双引号$o. = "<i onclick=\" $(\"#maindiv\").load('another.php'); return false; \">XXX</i>";
输出:
<i onclick=" $("#maindiv").load('another.php'); return false; ">XXX</i>
用单引号替换内部双引号(#maindiv
左右):
<i onclick=" $('#maindiv').load('another.php'); return false; ">XXX</i>
或用"
实体替换嵌套的双引号:
<i onclick=" $("#maindiv").load('another.php'); return false; ">XXX</i>
要自动进行此类替换,请使用PHP的内置htmlspecialchars()
功能。
顺便说一句,在调试过程中,将客户端与服务器端分开通常是一个好主意。首先使静态HTML工作,然后将其转换为服务器端脚本。并考虑使用模板引擎,而不是将HTML硬编码为PHP代码。