8

我在别人的网站上工作,它有一个非常愚蠢的逻辑!无论如何,有一个 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

4 回答 4

20

Pass the string into json_encode to properly escape it. If you're outputting to an HTML document, make sure to pass JSON_HEX_TAG as part of the options, to escape < and > and prevent a malicious user from ending your </script> tags early and introducing an XSS exploit.

于 2013-05-20T23:58:55.413 回答
4

尝试这个

var JsString = "<?php 
echo str_replace(array("\n","\r","\r\n"),'','YOUR 
MULTI LINE 
STRING');?>";
于 2014-07-08T13:29:07.673 回答
2

如果您绝对必须这样做,您可以在 JavaScript 中使用模板文字来回避这个问题。它们可以是多行的,所以你可以拥有

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

使用 PHP 的 jQuery Ajax POST 示例

如何在没有 jQuery 的情况下进行 AJAX 调用?

于 2020-06-09T16:05:49.897 回答
-1

Convert it into a string with the proper escape characters before printing it to the js.

于 2013-05-21T00:01:03.547 回答