使用preg_replace保存换行符

时间:2012-07-10 12:11:45

标签: php

我有这个代码用于保存输入到数据库的文本区域中的换行符:

$input = preg_replace("/(\n)+/m", '\n', $input);

在检查数据库中的输入时,实际上会保存换行符 但问题是,当我想要回显它时,不会出现换行符 在输出中,如何保留输入中的换行符并回显它们 出。我不想使用<pre></pre>

2 个答案:

答案 0 :(得分:4)

您正在使用文字两个字符序列$input(反斜杠+ n)替换\n中实际的换行序列 - 而不是换行符。从数据库读取时,需要将这些转换回换行符。虽然我怀疑你打算在数据库中保留这些实际换行符,但应该使用双引号字符串......

$input = preg_replace('/(\n)+/m', "\n", $input);

请注意,我已使用单引号替换第一个字符串分隔符,并使用双引号替换第二个字符串。 \n是正则表达式中的一个特殊序列,用于表示换行符(ASCII 10),但它也是PHP中的一个字符转义符,表示相同 - 两者有时会发生冲突。

答案 1 :(得分:1)

我认为PHP有​​解决方案:

  

nl2br - 在字符串

中的所有换行符之前插入HTML换行符

修改:您可能需要更换CR / LF以使其正常工作。

// Convert line endings to Unix style (NL)
$input = str_replace(array("\r\n", "\r"), "\n", $input);

// Remove multiple lines
$input = preg_replace("/(\n)+/m", '\n', $input);

// Print formatted text
echo nl2br($input);