【问题标题】:Using preg_replace to put all html tags within paragraph on new lines使用 preg_replace 将段落内的所有 html 标签放在新行上
【发布时间】:2021-07-01 08:54:49
【问题描述】:

我正在使用preg_replace 使段落块中的所有 html 标记都换行,例如<strong></strong><a></a>。但是,它会在任何替换标签的末尾产生额外的空格。

代码如下:

$text = preg_replace('/\/[a-zA-Z0-9]+>/', "$0\n", $text);

以下是检查器工具中返回的 html 输出示例:

<p>
  "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent "
  <strong>faucibus ut turpis </strong>
  <a href="#" target="_blank">eu consequat</a>
  " . Etiam fermentum nisi id massa ultricies, non pretium libero tempus.
</p>

如您所见,这会在超链接之后和句号之前添加空格。

【问题讨论】:

  • 表示空格已经存在,或者你有另一行代码在.之前插入空格。
  • @WiktorStribiżew - 我不这么认为。如果我注释掉这段代码,那么一切看起来又正常了。注意 - 这也是使用页面编辑器 CMS 系统。
  • \/[a-zA-Z0-9]+&gt; 不匹配任何空格。 $0\n 不引入任何空格,除了 LF 字符。由于您显示的那条线,该空间不存在 - 句号。
  • 这就是我的想法 - 但是如果只注释掉这行代码,就无法理解额外的空间是如何不再显示的。
  • 换行符是空格,这是检查员显示的内容

标签: php html preg-replace


【解决方案1】:

在 html 中,换行符是空格。您的代码正在运行 - 它在每个标记后插入一个换行符(即空格)。

检查器不区分 html 中的空白类型,因为它们都是等价的。

【讨论】:

    【解决方案2】:

    正如其他人已经评论的那样,空格在那里是因为您使用“\n”字符插入它(可能是basically this answer)。

    在段落中的语义(在 HTML 中,您可以使用 &lt;p&gt; 标记开始段落,结束标记是可选的)您可能希望换行符“\n”来格式化源代码,但您可能不希望它添加到(可见的)空白。

    如果原始来源是

     <a href="#" target="_blank">eu consequat</a>" . Etiam fermentum nisi id massa ultricies, non pretium libero tempus.
    

    使用您的正则表达式生成的结果会在结束 &lt;/a&gt; 标记之后添加换行符和此后的空格。它变得可见是因为之前没有空格。

    因此,如果在插入换行符“\n”之前包含任何非空格,则可以保留空格处理,因为当 HTML 在浏览器中呈现时,多个空格字符显示为一个空格。

    这可能更接近您对源代码制作的预期:

    $text = preg_replace('/\/[a-zA-Z0-9]+>\S*/', "$0\n", $text);
    

    \S 是任何非空白字符(\s 的反面,注意 US-ASCII 编码,IIRC 也应该足以用于以 UTF-8 编码的 HTML,否则请研究 PCRE_UTF8 和 PCRE_UCP 动词);

    并且应该导致如下生产:

      <a href="#" target="_blank">eu consequat</a>"
      . Etiam fermentum nisi id massa ultricies, non pretium libero tempus.
    

    由于引号后面有空格,并且链接直接以双引号结束,因此 HTML 渲染不应该受到空格的影响,因为没有引入新的空格段。

    不过,这事要持保留态度,这真的是这里某些人物的微观层面。

    我的回答中可能简化了处理空格的规则,并且 HTML 中的空格规范和浏览器中的实现加起来:

    【讨论】:

      猜你喜欢
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      相关资源
      最近更新 更多