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 【问题描述】:基本上我有这个脚本,我试图用 <br />
替换文字文本 \r\n
以进行正确的格式设置。我试过nl2br()
,它没有用<br />
替换\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)#', '<br/>', $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 (不替换新行)的主要内容,如果未能解决你的问题,请参考以下文章