从PHP打印HTML作为字符串时出现Javascript语法错误

时间:2015-11-13 15:28:06

标签: javascript php ajax

在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打印,然后由浏览器解释......我迷失了“哪里”引号应该被转义; )

1 个答案:

答案 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>

或用&quot;实体替换嵌套的双引号:

<i onclick=" $(&quot;#maindiv&quot;).load('another.php'); return false; ">XXX</i>

要自动进行此类替换,请使用PHP的内置htmlspecialchars()功能。

顺便说一句,在调试过程中,将客户端与服务器端分开通常是一个好主意。首先使静态HTML工作,然后将其转换为服务器端脚本。并考虑使用模板引擎,而不是将HTML硬编码为PHP代码。