我想用一个换行符替换多个换行符,多个空格换一个空格
我试过preg_replace("/\n\n+/", "\n", $text);
但失败了!
我也在$ text上进行格式化工作。
$text = wordwrap($text,120, '<br/>', true);
$text = nl2br($text);
$ text是用户为BLOG拍摄的大文本,为了更好的格式化,我使用wordwrap。
答案 0 :(得分:52)
理论上,你定期快递确实有效,但问题是并非所有操作系统和浏览器都只在字符串末尾发送\ n。许多人还会发送\ r。
尝试:
编辑:我简化了这个:
preg_replace("/(\r?\n){2,}/", "\n\n", $text);
编辑:并解决了一些发送\ r \ n的问题:
preg_replace("/[\r\n]{2,}/", "\n\n", $text);
更新1:根据您的更新:
// Replace multiple (one ore more) line breaks with a single one.
$text = preg_replace("/[\r\n]+/", "\n", $text);
$text = wordwrap($text,120, '<br/>', true);
$text = nl2br($text);
答案 1 :(得分:32)
使用\ R(代表任何行结束序列):
$str = preg_replace('#\R+#', '</p><p>', $str);
在此处找到:http://forums.phpfreaks.com/topic/169162-solved-replacing-two-new-lines-with-paragraph-tags/
关于Escape sequences的PHP文档:
\ R(换行符:匹配\ n,\ r和\ r \ n)
答案 2 :(得分:8)
这是答案,因为我理解这个问题:
// normalize newlines
preg_replace('/(\r\n|\r|\n)+/', "\n", $text);
// replace whitespace characters with a single space
preg_replace('/\s+/', ' ', $text);
修改强>
这是我用来将新行转换为HTML换行符和段落元素的实际函数:
/**
*
* @param string $string
* @return string
*/
function nl2html($text)
{
return '<p>' . preg_replace(array('/(\r\n\r\n|\r\r|\n\n)(\s+)?/', '/\r\n|\r|\n/'),
array('</p><p>', '<br/>'), $text) . '</p>';
}
答案 3 :(得分:2)
您需要多线修改器来匹配多条线:
preg_replace("/PATTERN/m", "REPLACE", $text);
同样在您的示例中,您似乎正在用2替换2个换行符,这不是您的问题所指示的。
答案 4 :(得分:1)
我会建议这样的事情:
preg_replace("/(\R){2,}/", "$1", $str);
这将处理所有Unicode换行符。
答案 5 :(得分:1)
我尝试了以上所有内容,但它对我不起作用。然后我创建了一些很长的路来解决这个问题......
之前:
echo nl2br($text);
之后:
$tempData = nl2br($text);
$tempData = explode("<br />",$tempData);
foreach ($tempData as $val) {
if(trim($val) != '')
{
echo $val."<br />";
}
}
这对我有用..我在这里写道是因为有人来这里找到像我这样的答案。
答案 6 :(得分:1)
如果您只想用一个标签替换多个标签,请使用以下代码。
preg_replace("/\s{2,}/", "\t", $string);
答案 7 :(得分:0)
试试这个:
preg_replace("/[\r\n]*/", "\r\n", $text);
答案 8 :(得分:0)
替换字符串或文档的头部和末尾!
preg_replace('/(^[^a-zA-Z]+)|([^a-zA-Z]+$)/','',$match);
答案 9 :(得分:0)
我已经处理过php中的strip_tags函数,遇到了一些问题:在有了一个换行后,然后出现一个带有一些空格的新行,然后一个新的换行符连续出现......等等,没有任何规则:(。
这是我处理strip_tags的解决方案
将多个空格替换为一个,多个换行符替换为单一换行符
希望这个帮助
function cleanHtml($html)
{
// clean code into script tags
$html = preg_replace('#<script(.*?)>(.*?)</script>#is', '', $html);
// clean code into style tags
$html = preg_replace('/<\s*style.+?<\s*\/\s*style.*?>/si', '', $html );
// strip html
$string = trim(strip_tags($html));
// replace multiple spaces on each line (keep linebreaks) with single space
$string = preg_replace("/[[:blank:]]+/", " ", $string); // (*)
// replace multiple spaces of all positions (deal with linebreaks) with single linebreak
$string = preg_replace('/\s{2,}/', "\n", $string); // (**)
return $string;
}
关键字是(*)和(**)