PHP将文字\r\n替换为<;br/>;(不更换新线路)

PHP将文字\r\n替换为<;br/>;(不更换新线路),php,html,regex,string,Php,Html,Regex,String,基本上,我有一个脚本,我试图用替换文本\r\n,以获得正确的格式。我尝试了nl2br(),但它没有将\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; $title=isset($p

基本上,我有一个脚本,我试图用

替换文本
\r\n
,以获得正确的格式。我尝试了
nl2br()
,但它没有将
\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;  
$title=isset($post[0])$post[0]:false;
$body=isset($post[1])?preg#u replace(“#”(\r |\r\n |\n)#,“
,$post[1]):false; echo$title.“
.”$body;
如果它在html中显示
\r
\n
,这意味着这些不是换行符和换行符,而是后跟r或n的转义反斜杠(
\\r
)。你需要去掉这些斜杠或更新你的正则表达式来解释它们。

正如@tandu提到的,如果你在html中看到
\r
\n
,那么你需要在应用
nl2br()
之前先使用
stripslashes()
。如果您确定数据来自表单,则会自动添加斜杠

因此,您的代码将变成:

$title = isset($post[0]) ? nl2br(stripslashes($post[0])) : false;
$body = isset($post[1]) ? nl2br(stripslashes($post[1])) : false;
echo $title."<br/>".$body;
$title=isset($post[0])?nl2br(斜杠($post[0]):false;
$body=isset($post[1])?nl2br(斜杠($post[1]):false;
echo$title.“
.”$body;
希望有帮助

编辑:
嗯…只是另一个想法。您是否应该使用$\u POST[0]和$\u POST[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;
$title=isset($post[0])$post[0]:false;
$body=isset($post[1])?preg#u replace('#(\\r\\n |\\r |\\n)#','
',$post[1]):false; echo$title.“
.”$body;
$body=isset($post[1])?preg#u replace(“#”(\\\r|\\\r\\\n\\\\n)\#,“
,$post[1]):false;
您需要三个
\\\
。在单引号内,
\
转换为
\
,因此
\\\r
变为
\\r
,并被送入
preg\u replace
功能

PREG引擎有自己的转义序列集,
\r
是其中之一,表示ASCII字符#13。要让PREG engine搜索文本
\r
,您需要传递字符串
\\r
,该字符串需要再次转义,因为它位于单引号内。

您可以尝试以下操作:

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

$title=isset($post[0])$post[0]:false;
$body=isset($post[1])?str_replace(数组('\r\n','\r','\n'),'
',$post[1]):false; echo$title.“
.”$body;
您所说的“它不工作”是什么意思?它没有取代换行符?失败,出现错误消息?未将其替换为新行。您的代码是正确的。取而代之的是什么输出(
$body
)以及使用
nl2br
时会得到什么?您确定您的输入包含
\r
\n
等吗?如果您可以在HTML中看到\r\n字面意思,那么它们实际上不是单个字符
\n
,并且单个字符
\r
nl2br()
不会像
'\r'
'\n'
那样转换文字,而只是真正的CR
chr(13)
和实LF
chr(10)
字节。它现在正在工作。我正在使用的代码:
$body=isset($post[1])?preg#u replace(“#”(\\\r|\\\r\\\n\\\\n)\#,“
,$post[1]):false@Josh:我错过了最后一个
n
之前的第三个斜杠。我已经编辑了我的答案。@FutureReaders请参见下面的
爆炸药丸
答案如果在html文本中获得
\n
,您应该使用输入样本更新您的问题,以便我们更好地找到问题所在。
$body = nl2br(strtr($post[1], array('\r' => chr(13), '\n' => chr(10))));
$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;