PHP 用 <br/> 替换文字 \r\n (不替换新行)

Posted

技术标签:

【中文标题】PHP 用 <br/> 替换文字 \\r\\n (不替换新行)【英文标题】:PHP replacing literal \r\n with <br/> (not replacing new lines)PHP 用 <br/> 替换文字 \r\n (不替换新行) 【发布时间】:2011-09-03 22:40:49 【问题描述】:

基本上我有这个脚本,我试图用 &lt;br /&gt; 替换文字文本 \r\n 以进行正确的格式设置。我试过nl2br(),它没有用&lt;br /&gt;替换\r\n。这是代码。

$title = isset($post[0]) ? $post[0] : false;
$body = isset($post[1]) ? preg_replace('#(\r|\r\n|\n)#', '<br/>', $post[1]) : false;
echo $title."<br/>".$body;  

【问题讨论】:

“它不起作用”是什么意思?没有替换换行符?失败并显示错误消息? 没有用新行替换它们。 您的代码是正确的。你得到的输出 ($body) 是什么,当你使用 nl2br 时你会得到什么?您确定您的输入包含\r\n 等吗? 如果您可以在 html看到 \r\n,那么它们实际上并不是单个字符\n 和单个字符\r nl2br() 不会 转换 '\r''\n' 之类的文字,但只会转换真正的 CR chr(13) 和真正的 LF chr(10) 字节。 【参考方案1】:
$body = isset($post[1]) ? preg_replace('#(\\\r|\\\r\\\n|\\\n)#', '<br/>', $post[1]) : false;

您需要三个\\\。在单引号内,\\ 转换为 \,因此 \\\r 变为 \\r,后者被馈送到 preg_replace 函数。

PREG 引擎有自己的一组转义序列,\r 是其中之一,表示 ASCII 字符 #13。要告诉 PREG 引擎搜索文字 \r,您需要传递字符串 \\r,它需要再次转义,因为您将它包含在单引号中。

【讨论】:

它正在工作。我正在使用的代码:$body = isset($post[1]) ? preg_replace('#(\\\r|\\\r\\\n|\\\n)#', '&lt;br/&gt;', $post[1]) : false; @Josh:我错过了最后一个 n 之前的第三个斜线。我已经编辑了我的答案。 @FutureReaders 如果在 html 文本中获得 \n,请参阅下面的 Explosion Pills 答案【参考方案2】:

如果它在您的 html 中显示 \r\n,这意味着它们不是换行符和换行符,而是后跟 r 或 n 的转义反斜杠(例如 \\r)。您需要去除这些斜线或更新您的正则表达式以解决它们。

【讨论】:

【参考方案3】:

你可以试试这个:

$body = nl2br(strtr($post[1], array('\r' => chr(13), '\n' => chr(10))));

【讨论】:

【参考方案4】:

试试str_replace() 函数

$title = isset($post[0]) ? $post[0] : false;
$body = isset($post[1]) ? str_replace(array('\r\n', '\r', '\n'), '<br/>', $post[1]) : false;
echo $title."<br/>".$body;

【讨论】:

【参考方案5】:

当我阅读问题的 cmets 时,我建议尝试以下代码:

$title = isset($post[0]) ? $post[0] : false;
$body = isset($post[1]) ? preg_replace('#(\\r\\n|\\r|\\n)#', '<br/>', $post[1]) : false;
echo $title."<br/>".$body;

【讨论】:

您应该使用输入样本更新您的问题,以便我们更好地找到问题所在。【参考方案6】:

正如@tandu 所说,如果您在 html 中看到\r\n,那么您需要先使用stripslashes(),然后再应用nl2br()。如果您的数据来自表单,则会自动添加斜线。

所以你的代码会变成:

$title = isset($post[0]) ? nl2br(stripslashes($post[0])) : false;
$body = isset($post[1]) ? nl2br(stripslashes($post[1])) : false;
echo $title."<br/>".$body;

希望对您有所帮助。

编辑: 嗯..只是另一个想法。你应该使用 $_POST[0] 和 $_POST[1] 吗?

【讨论】:

以上是关于PHP 用 <br/> 替换文字 \r\n (不替换新行)的主要内容,如果未能解决你的问题,请参考以下文章

PHP中替换换行符方法总结

如何用 <br/> 替换换行符或 \r\n?

在java中用<br />替换\n和\r\n

php字符的替换,截取,指定查找

JSON 解析出错问题

用 <br/> 替换换行符,在 <code> 标记内用   替换空格