使用 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 保存换行符的主要内容,如果未能解决你的问题,请参考以下文章