【问题标题】:PHP string containing line breaks causins problems when printing out Javascript打印出 Javascript 时,包含换行符的 PHP 字符串会导致问题
【发布时间】:2013-09-16 23:09:37
【问题描述】:

我有一个 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>
";

变成:

<script>
  if ('123 Main Street
City
Area Code'.indexOf('
') != -1)
  alert('yes');
  alert('123 Main Street
City
Area Code');
</script>

经过 PHP 处理后。字符串中的“转到行”被视为脚本标记中的转到行,因此会弄乱脚本。此外,我无法检测到 \n 字符,因为它被视为转到行,并弄乱了脚本...

如何使多行字符串在 javascript 中可用?

编辑:正如其中一个答案所建议的,在调用 javascript 之前,我尝试在 PHP 中将“\n”替换为“n”

$custDetailsBis = str_replace("\n", '\n', $custDetails);

echo "<script>
alert(\"$custDetailsBis\");
</script>";

还是不行,在浏览器中输出:

<script>
  alert("16 St Andrews Street
\nDundee
\nDD1 2EX");
</script>

请注意,我知道浏览器输出中出现了 \n,但仍有换行符。换行符再次导致 javascript 出现错误。

【问题讨论】:

    标签: javascript php string newline


    【解决方案1】:

    试试这个:

    $custDetailsEscaped = str_replace("\n", '\r\n', $custDetails);
    

    注意第一个参数的双引号和第二个参数的单引号 - 这在这里很重要。

    然后将echo 语句中的所有$custDetails 实例替换为$custDetailsEscaped

    $custDetailsEscaped = str_replace("\n", '\r\n', $custDetails); 
    
    echo "
    <script>
      if ('$custDetailsEscaped'.indexOf('\\r\\n') != -1)
         alert('yes');
      alert('$custDetailsEscaped');
    </script>
    ";
    

    输出:

    <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>
    

    【讨论】:

    • 也许我误解了你的问题。你在页面上寻找什么输出?
    • 您好,谢谢您的回答。不,实际上我希望对变量进行评估。那不是问题。如果您检查我发布的代码,问题是多行字符串(我想再次评估)包含换行符。正如您在我发布的浏览器源代码 sn-p 中看到的那样,这些换行符会弄乱 javascript。
    • 注意第一个参数的双引号,第二个参数的单引号:str_replace("\n", '\n', $custDetails)
    • 感谢您的帮助,但仍然无法正常工作!我已经用你的建议更新了我的问题的编辑部分,以及它产生的输出!
    • 嗯...您一定使用了一些奇怪的行尾。如果将这个 (pastebin.com/v0rrYzL5) 的内容粘贴到一个新的 PHP 文件中并运行它会发生什么?对我来说,它输出正确转义的警报 - alert("\n123 Main Street\nCity\nArea Code\n"); - 被 &lt;script&gt; 标签包围。
    【解决方案2】:

    您可以使用json_encode,它应该会自动将新行替换为\r\n。 p>

    json_encode($custDetails);
    

    【讨论】:

    • 投票给你的答案,但是你需要像我的情况一样保持换行符,不会有太大帮助。
    【解决方案3】:

    您可以使用str_replace() 更改End Of Line 购买空字符串。

    This post may help ,@elusive 在他的回答中使用 regex 来替换行尾。

    【讨论】:

      【解决方案4】:

      在从 php 回显 var 之前,您应该将 \n 替换为 \\n,以便 javascript 将其作为 \n 处理。

      【讨论】:

      • 您好,谢谢您的回答。我用我试图实施您的解决方案的内容更新了我的问题。仍然无法正常工作!
      猜你喜欢
      • 1970-01-01
      • 2020-02-27
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多