我希望将单个换行符(双倍已经消失)替换为<br>
个标签,但仅在中允许它们在上下文中。
例如,请考虑以下内容:
<ul>
<li>cat</li>
<li>dog</li>
<li>fish</li>
<li>horse</li>
</ul>
<br>
标记在上述代码的许多区域中都不允许 ,但运行通常的简单替换/添加代码,例如使用nl2br()
或运行{ {1}}显然不会遵循这些上下文规则。
对于上述内容,您需要遵循以下规则:
是否有可以执行此功能的当前功能/库?当然这是一个常见的问题,所以我想必定会有一些东西。
答案 0 :(得分:1)
这在PHP中很复杂。 nl2br不适合在您要处理的文本中保留HTML,因此您必须使用DOM解析器来执行此操作。
或者您可以编写自己的函数来循环遍历整个文本。每当遇到一个开口<
时,它应该保留一个标志,该标志在>
之后重置。当遇到换行符时,它可以检查该标志以查看该字符是应该保留还是由<br>
替换。这样,您可以逐个字符地构建结果字符串。请注意,无效标记可能很容易破坏这样的功能。
但我认为更简单,更好的解决方案是简单地添加一小块CSS:
white-space: pre-line;
将此应用于列表的父级(并隐式显示在列表及其项目中)。这将导致文本表现正常,但文本中的换行符也会破坏文本。