6

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

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

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

4

2 回答 2

5

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

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

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

于 2012-07-10T12:31:05.543 回答
3

我认为 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);
于 2012-07-10T12:42:11.567 回答