包含换行符的PHP字符串在打印Javascript时会导致问题
我有一个PHP字符串,它包含一个地址,因此包含几行。一个例子是:包含换行符的PHP字符串在打印Javascript时会导致问题,javascript,php,string,newline,Javascript,Php,String,Newline,我有一个PHP字符串,它包含一个地址,因此包含几行。一个例子是: $custDetails = " 123 Main Street City Area Code "; 虽然此地址是使用SQL查询检索的,但不是在PHP中声明的 我想暂时用其他字符替换go-to-line字符,以便在另一个javascript函数中更轻松地修改此字符串。但我遇到了一些问题。此代码: echo " <script> if ('$custDetails'.indexOf('\n') != -1)
$custDetails = "
123 Main Street
City
Area Code
";
虽然此地址是使用SQL查询检索的,但不是在PHP中声明的
我想暂时用其他字符替换go-to-line字符,以便在另一个javascript函数中更轻松地修改此字符串。但我遇到了一些问题。此代码:
echo "
<script>
if ('$custDetails'.indexOf('\n') != -1)
alert('yes');
alert('$custDetails');
</script>
";
echo”
如果(“$custDetails”.indexOf(“\n”)!=-1)
警惕(“是”);
警报(“$custDetails”);
";
变成:
<script>
if ('123 Main Street
City
Area Code'.indexOf('
') != -1)
alert('yes');
alert('123 Main Street
City
Area Code');
</script>
如有需要,主街123号
城市
区号“.indexOf('
') != -1)
警惕(“是”);
警报('123 Main Street
城市
区号);;
经过PHP处理。字符串中的“转到行”在脚本标记中被视为转到行,因此会弄乱脚本。此外,我无法检测\n字符,因为它被视为一个“转到”行,并将脚本弄乱
如何使多行字符串在javascript中可用
编辑:正如其中一个答案中所建议的,在调用javascript之前,我尝试在PHP中将“\n”替换为“n”
$custDetailsBis = str_replace("\n", '\n', $custDetails);
echo "<script>
alert(\"$custDetailsBis\");
</script>";
$custdailsbis=str\u replace(“\n”、“\n”、$custdails);
回声“
警报(\“$custDetailsBis\”);
";
我仍然不工作,在浏览器中输出:
<script>
alert("16 St Andrews Street
\nDundee
\nDD1 2EX");
</script>
警报(圣安德鲁斯街16号
\恩东迪
\nDD1 2EX”);
请注意,我知道在浏览器输出中出现了\n,但仍有换行符。换行符再次导致javascript中出现错误。尝试以下操作:
$custDetailsEscaped = str_replace("\n", '\r\n', $custDetails);
注意第一个参数的双引号和第二个参数的单引号-这在这里很重要
然后将echo
语句中的$custDetails
的所有实例替换为$custDetailsCaped
:
$custDetailsEscaped = str_replace("\n", '\r\n', $custDetails);
echo "
<script>
if ('$custDetailsEscaped'.indexOf('\\r\\n') != -1)
alert('yes');
alert('$custDetailsEscaped');
</script>
";
$custdailsescaped=str\u replace(“\n”、“\r\n”、$custdails);
回声“
如果(“$custDetailsCaped.”indexOf(“\\r\\n”)!=-1)
警惕(“是”);
警报(“$custDetailsCaped”);
";
输出:
<script>
if ('\r\n123 Main Street\r\nCity\r\nArea Code\r\n'.indexOf('\r\n') != -1)
alert('yes');
alert('\r\n123 Main Street\r\nCity\r\nArea Code\r\n');
</script>
如果('\r\n123 Main Street\r\nCity\r\n区域代码\r\n'.indexOf('\r\n')!=-1)
警惕(“是”);
警报('\r\n123 Main Street\r\nCity\r\n区域代码\r\n');
您可以使用str_replace()
更改行尾
购买空字符串
,@elvasive在他的回答中使用了
regex
来替换行尾。在从php回显var之前,您应该将\n替换为\\n以便javascript将其处理为\n。您可以使用它自动将新行替换为\r\n
也许我误解了你的问题。你在页面上寻找什么输出?嘿,谢谢你的回答。不,实际上我想对变量求值。这不是问题所在。如果您检查我发布的代码,问题是多行字符串(我想再次求值)包含换行符。正如您在我发布的浏览器源代码片段中看到的那样,这些行分隔符会弄乱javascript。请注意第一个参数上的双引号和第二个参数上的单引号:
str\u replace(“\n”、'\n'、$custDetails)
谢谢您的帮助,但它仍然不起作用!我已经用你的建议更新了我问题的编辑部分,以及它产生的输出!隐马尔可夫模型。。。你一定用了一些奇怪的行尾。如果将这个()的内容粘贴到一个新的PHP文件中并运行它,会发生什么?对我来说,它输出正确转义的警报-警报(“\n123 Main Street\nCity\nArea code\n”)代码>-被
标签包围。嘿,谢谢你的回答。我用我试图实现您的解决方案的内容更新了我的问题。还是不能让它工作!投票表决你的答案,不管你需要像我这样保持分线,都不会有多大帮助。
json_encode($custDetails);