使用 preg_replace 保存换行符

Posted

技术标签:

【中文标题】使用 preg_replace 保存换行符【英文标题】:Saving line breaks with preg_replace 【发布时间】:2012-07-09 22:36:46 【问题描述】:

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

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

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

【问题讨论】:

How to remove line breaks (no characters!) from the string? 的可能重复项 【参考方案1】:

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

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

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

【讨论】:

你是对的,我发现,我必须将输出转换回新行。我使用了以下代码并且它有效: $output = preg_replace("/(\n)+/m", '', $output);【参考方案2】:

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

【讨论】:

谢谢,nl2br 的问题在于,如果将输入内容复制并粘贴到文本区域而不是直接输入并按回车键,则它不起作用。 我认为您需要清除 CRLF。请看看我的编辑。

以上是关于使用 preg_replace 保存换行符的主要内容,如果未能解决你的问题,请参考以下文章

preg_replace 密码过滤器

PHP 在 preg_replace 上崩溃

将preg_replace()改写为preg_replace_callback()

BBCode 需要 preg_replace 帮助

未知修饰符 '/' preg_replace()

PHP中使用正则表达式详解 preg_match() preg_replace() preg_mat