0

我希望将单换行符(双打已经消失)替换为<br>标签,但前提是它们在上下文中被允许。

例如,考虑以下内容:

<ul>
  <li>cat</li>
  <li>dog</li>
  <li>fish</li>
  <li>horse</li>
</ul>

<br>上述代码中的许多区域都不允许使用标签,但是运行通常的简单替换/添加代码(例如 usingnl2br()或运行 a )str_replace()显然不会遵循这些上下文规则。

对于上述情况,您需要遵循以下规则:

  • 转换起始列表标记之前的换行符
  • 不应转换起始列表标记的换行符
  • 不应转换起始列表项标记之前的换行符
  • 转换起始列表项标记的换行符
  • 转换结束列表项标记之前的换行符
  • 不应转换结束列表项标记的换行符
  • 不应转换结束列表标记之前的换行符
  • 转换结束列表标记的换行符

当前是否有可以执行此功能的函数/库?当然这是一个普遍的问题,所以我想一定有什么。

4

1 回答 1

1

这在 PHP 中会很复杂。nl2br 不适合在您要处理的文本中保留 HTML,因此您必须使用 DOM 解析器来执行此操作。

或者您可以编写自己的函数来循环整个文本。每次遇到开口时<,它都应该保留一个标志,该标志在>. 当它遇到换行符时,它可以检查标志以查看该字符是否应该被保留或替换为<br>. 这样,您可以逐个字符地构建结果字符串。请注意,无效标记可能很容易破坏这样的功能。

但我认为一个更简单、更好的解决方案是简单地添加一小块 CSS:

white-space: pre-line;

将此应用于列表的父级(也隐式应用于列表及其项目)。这将导致文本表现正常,除了文本在文本中的换行符上也被破坏。

于 2015-04-06T08:38:30.340 回答