【问题标题】:How to convert multiple <br/> tag to a single <br/> tag in php如何在php中将多个<br/>标签转换为单个<br/>标签
【发布时间】:2010-09-13 02:40:20
【问题描述】:

想要转换

<br/>
<br/>
<br/>
<br/>
<br/>

进入

<br/>

【问题讨论】:

  • 您是否正在寻找可以输入 HTML 文件并减少 BR 标签的 PHP 程序?您的问题并不完全清楚。

标签: php html regex


【解决方案1】:

使用正则表达式匹配&lt;br/&gt;一次或多次,然后使用preg_replace(或类似的)替换为&lt;br/&gt;,例如levik的回复。

【讨论】:

    【解决方案2】:

    您可以使用正则表达式来做到这一点:

    preg_replace("/(<br\s*\/?>\s*)+/", "<br/>", $input);
    

    如果您传入源 HTML,这将返回一个字符串,其中单个
    替换它们的每次运行。

    【讨论】:

    • 是否忽略
      之间的空格?
    • 这允许
      之间的任何空白字符(空格、制表符、换行符)
    • @Sam:\s 表示“任何空白字符”。
    • @levik:您应该将其更改为 /(
      \s*)+/ 以获得更健壮/通用的 HTML/SGML/XHTML br 匹配。跨度>
    • @levik:替换字符串不应该是“
      ”吗?您的代码当前将
      输出到 HTML。
    【解决方案3】:

    您可能想要使用正则表达式。以下我没有测试过,但我相信它是正确的。

    $text = preg_replace( "/(<br\s?\/?>)+/i","<br />", $text );
    

    【讨论】:

      【解决方案4】:

      我的几乎与levik 的 (+1) 完全相同,只是考虑了一些不同的 br 格式:

      preg_replace('/(<br[^>]*>\s*){2,}/', '<br/>', $sInput);
      

      【讨论】:

      • 比 levik 的稍微好一点,甚至应该更快。
      【解决方案5】:

      没有 preg_replace,但仅适用于 PHP 5.0.0+

      $a = '<br /><br /><br /><br /><br />';
      while(($a = str_ireplace('<br /><br />', '<br />', $a, $count)) && $count > 0)
      {}
      // $a becomes '<br />'
      

      【讨论】:

        【解决方案6】:

        增强的可读性,更短,无论属性如何都能产生正确的输出:

        preg_replace('{(<br[^>]*>\s*)+}', '<br/>', $input);
        

        【讨论】:

          【解决方案7】:

          谢谢大家.. 使用 Jakemcgraw 的 (+1) 版本

          刚刚添加了不区分大小写选项..

          {(<br[^>]*>\s*)+}i
          

          测试这些正则表达式的好工具是:

          http://www.spaweditor.com/scripts/regex/index.php

          【讨论】:

            【解决方案8】:

            一种快速、非正则表达式的方法:

            while(strstr($input, "<br/><br/>"))
            {
                $input = str_replace("<br/><br/>", "<br/>", $input);
            }
            

            【讨论】:

              【解决方案9】:

              用户可以输入许多变体

              <br>
              <br/>
              < br />
              <br >
              <BR>
              <BR>< br>
              

              ...还有更多。

              所以我觉得接下来会更好

              $str = preg_replace('/(<[^>]*?br[^>]*?>\s*){2,}/i', '<br>', $str);
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2020-04-16
                • 2015-05-21
                • 2015-08-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-11-13
                • 2017-01-15
                相关资源
                最近更新 更多