Мне нужно заменить несколько случаев <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
строка.
Вы можете попробовать сначала взорваться с конца строки (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
Других решений пока нет …