如何转义数据库中${HOST}类变量?解决JS模板字符串报错
解决
<pre><code>代码存入数据库后输出的两类报错问题 一、搞定Uncaught ReferenceError: HOST is not defined报错
- 问题出在:输出的代码里的
${HOST}是JS模板字符串语法,浏览器会自动尝试解析这个变量,但你的运行环境里没定义HOST,所以报错。 - 直接这么改:把模板字符串里的
$转义成\$,也就是把${HOST}改成\${HOST},这样浏览器就不会把它当成JS变量去解析了。如果是用PHP输出这段代码,要确保转义后的字符能正确输出到页面。
二、解决Uncaught SyntaxError: '' string literal contains an unescaped line break报错
- 问题出在:多行代码用单/双引号包裹时,换行符没转义,JS认不出来。你现在用了反引号,但如果输出过程中反引号被转义或者处理错了,就会触发这个报错。
- 针对你那行报错代码的修正方案:
- 别再用
htmlspecialchars(addslashes())了,改用json_encode(),它能自动处理换行、引号转义,直接生成合法的JS字符串,比手动转义靠谱多了。 - 修改后的代码示例:
<?php // 从数据库取出存的代码内容 $code_content = $getpost["post"]; ?> <script> e.setContent(escape(<?php echo json_encode($code_content); ?>)); </script>
- 别再用
- 为啥之前的处理没用?因为
htmlspecialchars(addslashes())只处理了HTML和SQL层面的转义,完全没考虑JS字符串的规则,比如换行符要转成\n、引号要嵌套转义这些,json_encode()会一次性搞定这些问题。
额外提醒
- 如果数据库里存的是带
<pre><code>标签的完整内容,取出时最好先把标签剥离,只处理里面的代码内容,避免标签里的尖括号、引号干扰JS解析。 - 要是必须保留标签,也直接用
json_encode()处理整个带标签的内容,确保输出给JS的是合法字符串。
内容的提问来源于stack exchange,提问作者xaaaaaaaaaaaa
相关产品推荐
相关产品推荐

