Я ищу, чтобы заменить одиночные разрывы строк (двойники уже пропали) в <br>
теги, но только когда они разрешены в контексте.
Например, рассмотрим ниже:
<ul>
<li>cat</li>
<li>dog</li>
<li>fish</li>
<li>horse</li>
</ul>
<br>
теги не разрешено во многих областях приведенного выше кода, но работает обычный простой код замены / добавления, такой как использование nl2br()
или работает str_replace()
очевидно, не будет следовать этим правилам контекста.
Для вышеперечисленного вам необходимо соблюдать следующие правила:
Существуют ли текущие функции / библиотеки, которые уже могут выполнять эту функцию? Конечно, это общая проблема, поэтому я думаю, что должно быть что-то.
Это было бы сложно сделать в PHP. nl2br не подходит для сохранения HTML в тексте, который вы хотите обработать, поэтому вам придется использовать синтаксический анализатор DOM для этого.
Или вы можете написать свою собственную функцию, которая перебирает весь текст. Каждый раз, когда он сталкивается с открытием <
он должен сохранять флаг, который сбрасывается после >
, Когда он встречает символы новой строки, он может проверить флаг, чтобы увидеть, должен ли символ быть сохранен или заменен на <br>
, Таким образом, вы можете построить строку результата за символом. Обратите внимание, что неправильная разметка может легко сломать такую функцию.
Но я думаю, что более простое и гораздо лучшее решение — просто добавить небольшой кусочек CSS:
white-space: pre-line;
Примените это к родителю списка (и неявно к списку и его элементам тоже). Это приведет к тому, что текст будет вести себя как обычно, за исключением того, что текст также разбит на символы новой строки в тексте.
Других решений пока нет …