“ n"在PHP中,字符串变量存储在javascript变量中会导致换行

" " in php string variable when stored in javascript variable causes line break

本文关键字:变量 存储 javascript 换行 quot PHP 字符串      更新时间:2023-09-26

例如我的php字符串变量包含

$code="#include<iostream>   using namespace std;
void main() { 
cout<<"Hello world 'n"; 
}"

在javascript中,当我输入

var text=<?php echo json_encode($code); ?> 
console.log(text);

然后给出输出

"#include<iostream>
using namespace std;
void main(){
cout<<"Hello world
";
}"

取下一行结束的反引号。我该怎么办?

让我们从期望的输出回溯到生成输出。您希望console.log显示包含'n的值:

"foo'nbar"

这意味着JavaScript代码中的字符串必须看起来像

var text = '"foo''nfoo"';

json_encode已经为我们照顾引号的东西,所以我们所需要做的就是生成一个PHP字符串,字面上包含''n

根据您生成字符串的方式,有几种方法:

// single quotes
$code = 'foo'''nbar';
// double quotes
$code = "foo''''nbar";
// heredoc (same as double quotes)
$code = <<<CODE
foo''''nbar
CODE;

或者您可以使用addcslashes转义字符串中任何现有的':

$code = addslashes('foo'nbar', '''');
$code = addslashes("foo''nbar", "''");

或者在将字符串赋值给'code'变量时转义反斜杠,如下所示:

cout<<"Hello world ''n";

…或者在打印字符串之前替换新的行字符:

console.log(text.replace(/'n/,"''n"));

由于包装的代码似乎是c++,您可以将'n替换为c++常量endl

结果是

$code="#include<iostream>   using namespace std;
void main() { 
cout<<'"Hello world '"<<endl; 
}"

可以使用反斜杠字符

text=text.replace(/''n/g,"''n");