用json_encode编码的JS变量返回SyntaxError:missing;在声明之前

时间:2013-01-05 09:20:48

标签: javascript json

以前,我在JS遇到“未终止的字符串字面错误”:SyntaxError: unterminated string literal strange error

我有点使用json_encode修复它,因为转换了换行符。

现在我得到了这些奇怪的结果,例如这个JS变量(用json_encode处理):

        cacheObj_open.handler='<pre class="brush: html;">"&lt;html&gt;\r\n&lt;body&gt;\r\n&lt;p&gt;Hello world.&lt;\/p&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;"</pre>';         

将使用带有双引号的代码输出:

"<html>
<body>
<p>Hello world.</p>
</body>
</html>"

以上代码运行时没有控制台错误。但下面的那个(也用json_encode处理)会抛出 SyntaxError:missing;在声明之前错误:

cacheObj_open.handler='<pre class="brush: html;">"\r\n&lt;?php\r\n$stmt = $dbh-&gt;prepare(&quot;SELECT * FROM REGISTRY where name = ?&quot;);\r\nif ($stmt-&gt;execute(array($_GET['name']))) {\r\n  while ($row = $stmt-&gt;fetch()) {\r\n    print_r($row);\r\n  }\r\n}\r\n?&gt;"</pre>';            

将HTML实体源代码输出到JS变量时,避免任何错误的最佳方法是什么?我知道json_encode会逃避一些新行(这是一个好主意),但基于上面的例子,它仍然会为某些代码抛出错误。我感谢任何意见和建议。

我曾尝试在PHP端添加addslashes,但它仍然会抛出错误。

1 个答案:

答案 0 :(得分:0)

这种情况下的错误是execute(array($_GET['name'],这里的单引号关闭整个字符串周围的引号。他们应该用反斜杠进行转义。