Множественные вхождения должны быть заменены на & lt; br / & gt;

Мне нужно заменить несколько случаев <br />, <br>, <br/>, \r, \n, \r\n только с 1 <br />, но только там, где он отображается вместе, так что я могу разбить абзацы на массив и обрезать последний разрыв строки br тег в конце строки …

Пример строки может быть следующим:

This is paragraph 1<br>

This is paragraph 2<br /><br>This is paragraph 3
This is paragraph 4This is paragraph 5<br/>
This is paragraph 6This is paragraph 7<br />This is paragraph 8

This is paragraph 9<br>

Что я пробовал:

$description = !empty($results['Description']) ? strip_tags(rtrim(str_replace(array("\n", "\r", "\r\n", "<br>", "<br/>", "<br />"), array("<br />"), $results['Description']), '<br />'), '<br><a>') : '';

$paragraphs = array_filter(explode("<br />", $description));

Но это сокращает все разрывы строк. Мне нужно поддерживать разрывы строк там, где они находятся в строке, но я хочу сделать только 1 разрыв строки и удалить все остальные. Как это сделать?

Примечание: я использую strip_tags, потому что я хочу разрешить только <br> а также <a> теги в $description строка.

0

Решение

Вы можете попробовать сначала взорваться с конца строки (PHP_EOL), раздеть все, кроме <a>, затем array_filter(), implode(), а также trim():

$str    =   'This is paragraph 1<br>

This is paragraph 2<br /><br>This is paragraph 3
This is paragraph 4This is paragraph 5<br/>
This is paragraph 6This is paragraph 7<br />';

$str    =   trim(implode('<br />'.PHP_EOL,array_filter(explode(PHP_EOL,strip_tags($str,'<a>')))));

echo $str;

Дает тебе:

This is paragraph 1<br />
This is paragraph 2<br />
This is paragraph 3<br />
This is paragraph 4<br />
This is paragraph 5<br />
This is paragraph 6<br />
This is paragraph 7

Ваш второй сценарий:

$str    =   'This is paragraph 1<br>

This is paragraph 2<br /><br>This is paragraph 3
This is paragraph 4This is paragraph 5<br/>This is paragraph 5
This is paragraph 6This is paragraph 7<br />';

# Explode on line breaks and remove empty lines
$exp    =   array_filter(explode(PHP_EOL,$str));
# Loop array and filter the lines
$new    =   array_map(function($v) {
return strip_tags(trim($v,'<br>,<br />,<br/>'),'<a><br>');
},$exp);
# Implode the array back
echo implode('<br />'.PHP_EOL,$new);

Дает тебе:

This is paragraph 1<br />
This is paragraph 2<br />
This is paragraph 3<br />
This is paragraph 4<br />
This is paragraph 5<br/>This is paragraph 5<br />
This is paragraph 6<br />
This is paragraph 7
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]