将多行的php字符串传递给javascript函数/变量

时间:2013-05-20 23:56:03

标签: php javascript jquery

我在别人的网站上工作,它有一个非常愚蠢的逻辑! 无论如何,有一个php变量,其中包含一个来自数据库的字符串。

$x = ' aaaa
bbb

ccc


gggg ';

我需要将此字符串提供给javascript函数:

<script>

var x = "<?php echo $x ; ?>";
some_function(x);

</script>

如您所知,我最终得到了一个错误,因为javascript变量不能包含多行而不将它们连接在一起,如下所示:

var x = ' i '+
        ' have '+
        ' different lines'; 

我该怎么做?如果它删除行或正确格式化它并不重要,我只是想摆脱这个错误。

4 个答案:

答案 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安全地传输数据:

jQuery Ajax POST example with PHP

How to make an AJAX call without jQuery?

答案 3 :(得分:-1)

在将其打印到js之前,将其转换为具有正确转义字符的字符串。