Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包含换行符的PHP字符串在打印Javascript时会导致问题_Javascript_Php_String_Newline - Fatal编程技术网

包含换行符的PHP字符串在打印Javascript时会导致问题

包含换行符的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)

我有一个PHP字符串,它包含一个地址,因此包含几行。一个例子是:

$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);