如何将换行符转换为 \n?

5

我从数据库中得到一个返回字符串。

这个返回字符串必须用JavaScript格式化。

<?php
    $db = "this is a line
           this is a new line";
?>

如何将上述内容转换为:
<?php $db = "this is a line \n this is a new line"; ?>

Javascript:

<script>
    var jdb = <?php echo $db; ?>
</script>

1
另一个问题是您没有正确地将字符串插入JavaScript中。它应该是var jdb = "<?php echo $db; ?>"; - Felix Kling
8个回答

26

尝试这个(更新于2014年11月08日):

<?php

   $db = "this is a line
          this is a new line
          ";

?>
<script type="text/javascript">
  var jdb = <?php echo json_encode($db) ?>;
</script>

我的变量$db中没有"\r\n",它只是文本区域的行。 - dev.bashar
如果它们来自 <textarea>,它们应该全部为 \r\n。无论如何,上述代码只是调整了不同的行尾样式,以便其能够对任何样式产生相同的结果。 - DaveRandom
1
你让我的生活变得更轻松了 :) - Abudayah
有人能解释一下json_encode()是如何实现的吗?@DaveRandom - musafar006
这是我成功查看 PHP_EOL 值的方法。谢谢 :) - Omkar76

10
$db = preg_replace("/\n/m", '\n', $db);

这应该能解决问题


当您不使用 ^$ 时,无需使用 /m,并且您的表达式应该用单引号表示;-) - DaveRandom
谢谢,我不知道使用m修饰符 :) 如果主题字符串中没有"\n"字符或模式中没有出现^或$的情况下,设置此修饰符将不起作用。 - Fabrizio Calderan

5

为了正确保留\r\n的换行符,您可以轻松使用strtr

$db = strtr( $db, array(  "\n" => "\\n",  "\r" => "\\r"  ));

1
与使用 preg_replace 和 \n 不同的是,这种方法不会显示警告。干杯! - Igor L.

2

我不明白重点在哪里,但你可以(通过添加反斜杠来转义换行符)

$db = str_replace("\n","\\n",$db);

1
$db = str_replace("\r\n", "\\n", $db);

0

我不确定我是否理解正确,因为 \n 是换行符!?

但你可能需要:

$db = str_replace("\r\n", "\n", $db);

我的 $db 变量里没有 "\r\n",它只是文本框中的行。 - dev.bashar

0
你想要输出到JavaScript......嗯,如果你想将它插入到HTML中,你可能需要像这样的东西(测试已运行):
<div id="test"></div>
<script type="text/javascript">
<?php
  $string = "123
  456"; // or $string = "123\n456";
  $string = str_replace(array("\r\n","\n"),"\\\\n",$string);
  echo "document.getElementById('test').innerHTML = '".htmlentities($string)."';";
?>
</script>

通过js将输出123\n 456添加到div中

如果你只是想在js中这样做,只需删除两个斜杠,使其在php中为"\n",在js中为"\n"。


-3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接