使用preg_replace保存换行符


Saving line breaks with preg_replace

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

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

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

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

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

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

我认为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);