PHP替换\ r \ n而不替换新行

时间:2011-05-28 13:03:11

标签: php html regex string line-breaks

基本上我有这个脚本,我正在尝试用\r\n替换<br />以获得正确的格式。我已尝试nl2br(),但未将\r\n替换为<br />。这是代码。

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

6 个答案:

答案 0 :(得分:16)

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

您需要三个\\\。在单引号内,\\会转换为\,因此\\\r变为\\r,会被preg_replace函数提供。{/ p>

PREG引擎有自己的一组转义序列,\r就是其中之一,这意味着ASCII字符#13。要告诉PREG引擎搜索文字\r,您需要传递需要再次转义的字符串\\r,因为您将其放在单引号内。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

正如@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]吗?

答案 3 :(得分:1)

当我阅读问题的评论时,我建议尝试使用以下代码:

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

答案 4 :(得分:1)

你可以试试这个:

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

答案 5 :(得分:1)

尝试str_replace()功能

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