2008-09-25 2 views

ответ

34

Вы можете сделать это с регулярным выражением:

preg_replace("/(<br\s*\/?>\s*)+/", "<br/>", $input); 

это, если вы передаете в исходном HTML, это возвращает строку с одним < бр /> заменяющего каждого запуска из них.

+0

Не игнорирует ли пробел между
? – Sam

+1

это позволяет использовать любые пробельные символы (пробел, табуляцию, новую строку) между
enobrev

+0

@Sam: \ s означает «любой символ пробела». – user7116

2

использовать регулярное выражение, чтобы соответствовать <br/> один или несколько раз, а затем использовать preg_replace (или аналогичный) заменить на <br/>, например, ответ levik.

1

Возможно, вы захотите использовать регулярное выражение. Я не тестировал следующее, но считаю, что это правильно.

$text = preg_replace("/(<br\s?\/?>)+/i","<br />", $text); 
16

Шахта почти точно так же, как и levik «с (+1), просто приходится какое-то другое бр форматированием:

preg_replace('/(<br[^>]*>\s*){2,}/', '<br/>', $sInput); 
+0

Немного лучше, чем у levik, и должен быть даже быстрее. –

2

без preg_replace, но работает только в PHP 5.0.0+

$a = '<br /><br /><br /><br /><br />'; 
while(($a = str_ireplace('<br /><br />', '<br />', $a, $count)) && $count > 0) 
{} 
// $a becomes '<br />' 
+0

+1: Regex кажется лучше, но это другой подход. – JCasso

6

Улучшенная читаемость, короче, производит правильный вывод, независимо от атрибутов:

preg_replace('{(<br[^>]*>\s*)+}', '<br/>', $input); 
5

Спасибо всем .. б Jakemcgraw (в +1) версия

Просто добавил случай insensative вариант ..

{(<br[^>]*>\s*)+}i 

Отличный инструмент для проверки этих регулярных выражений:

http://www.spaweditor.com/scripts/regex/index.php

+0

Вот еще один инструмент для тестирование регулярных выражений: http://gskinner.com/RegExr/ –

1

Метод быстрого, не регулярного выражения:

while(strstr($input, "<br/><br/>")) 
{ 
    $input = str_replace("<br/><br/>", "<br/>", $input); 
} 
1

Пользователь может ввести много вариантов

<br> 
<br/> 
< br /> 
<br > 
<BR> 
<BR>< br> 

... и многое другое.

Так что я думаю, что это будет лучше в следующем

$str = preg_replace('/(<[^>]*?br[^>]*?>\s*){2,}/i', '<br>', $str); 
Смежные вопросы