我在别人的网站上工作,它有一个非常愚蠢的逻辑! 无论如何,有一个php变量,其中包含一个来自数据库的字符串。
$x = ' aaaa
bbb
ccc
gggg ';
我需要将此字符串提供给javascript函数:
<script>
var x = "<?php echo $x ; ?>";
some_function(x);
</script>
如您所知,我最终得到了一个错误,因为javascript变量不能包含多行而不将它们连接在一起,如下所示:
var x = ' i '+
' have '+
' different lines';
我该怎么做?如果它删除行或正确格式化它并不重要,我只是想摆脱这个错误。
答案 0 :(得分:16)
将字符串传递给json_encode以正确转义它。如果您要输出到HTML文档,请确保将JSON_HEX_TAG
作为选项的一部分传递,以逃避<
和>
,并防止恶意用户结束您的</script>
早期标记并引入XSS漏洞。
答案 1 :(得分:2)
试试这个
var JsString = "<?php
echo str_replace(array("\n","\r","\r\n"),'','YOUR
MULTI LINE
STRING');?>";
答案 2 :(得分:0)
如果您必须绝对这样做,则可以在JavaScript中使用template literals来规避此问题。它们可以是多行的,所以您可以拥有
<script>
var x = `<?php echo $x ; ?>`;
some_function(x);
</script>
这将产生以下JavaScript代码:
var x = ` aaaa
bbb
ccc
gggg `;
some_function(x);
function some_function(x) {
console.log(x);
}
需要注意的是,模板文字可以在其中包含代码,如果放在${}
中,则会对其进行评估。因此,如果您的PHP代码产生了这样的字符串,但是您要求将其按字面显示,那么您可能会遇到问题:
var x = `hello ${1 + 1}`;
var y = "hello ${1 + 1}";
console.log(x);
console.log(y);
如果您的PHP代码恰巧产生了一些JavaScript可以解释为变量名的东西,这将尤其危险:
var x = `hello ${y}`; //error - there is no variable `t`
话虽如此,最好避免以编程方式生成源代码,因为它容易出错。最好使用AJAX安全地传输数据:
答案 3 :(得分:-1)
在将其打印到js之前,将其转换为具有正确转义字符的字符串。