【问题标题】:Prevent <br> after <div>在 <div> 之后防止 <br>
【发布时间】:2012-01-14 00:52:58
【问题描述】:

我想知道如何删除所有&lt;br/&gt; 现有就在 div 标记之后。这可能吗?只要在&lt;div&gt; 标记之后打印了一些常规文本,就应该再次允许&lt;br/&gt;

&lt;br/&gt; 是因为 nl2br 而添加的。

我不希望用户通过多次输入来破坏我的页面格式。如果能够解决这个问题,那就太好了。

谢谢。

【问题讨论】:

  • 用户如何创建那些div 标签?请解释发生了什么,可能有比替换那些brs 更好的解决方案。
  • @bazmegakapa:用户输入 [title]wagawaga[/title],然后是一些常规文本。使用常规文本创建一个新的 div 标签,如下所示; &lt;div class="Title"&gt;Boom! You're done!&lt;/div&gt;&lt;div class="Content"&gt; &lt;br&gt;There are some additional...

标签: php


【解决方案1】:

一个简单的 str_replace 将对其进行排序,只需检查nl2br() 使用的是哪种&lt;br&gt; &lt;br/&gt; &lt;br /&gt; 标签,

$string = str_replace('</div><br />' , '</div>' , $string);

【讨论】:

  • 但它对


    没有帮助,如果我理解正确,这是另一个问题。我会为此使用正则表达式。
  • 感谢您的回答,但是由于我无法确定用户按了多少次回车,即可能有 30 br/s。
  • @alekwisnia:否则我想允许&lt;br /&gt;。这只是在&lt;div&gt; 的开头,我不希望他们被允许。
  • 修复多个
    的问题见stackoverflow.com/a/8399723/956397
  • 【解决方案2】:

    更好的解决方案是防止nl2br() 将HTML-breaks 放在字符串的开头和结尾。

    $text = nl2br(trim($text));
    

    【讨论】:

    • 当然可以,但是我要删除的这些换行符出现在字符串中的任何位置,具体取决于用户正在编写的内容。
    【解决方案3】:
    $count = 1;
    while ($count != 0)
    {
        $string = str_replace('</div><br/>' , '</div>' , $string, $count);
    }
    

    【讨论】:

      【解决方案4】:
      $string = preg_replace('/<div>(<br[^>]*>\s*)+/', '<div>', '$string');
      

      这是基于:How to convert multiple <br/> tag to a single <br/> tag in php

      【讨论】:

      • 不过有一个问题 - 有没有办法同时删除 &lt;div&gt;&lt;br&gt; 之间的任何空格?
      • /&lt;div&gt;(\s*&lt;br[^&gt;]*&gt;\s*){2,}/ - \s 代表空格
      • 顺便说一句,这是一个很棒的正则表达式工具:spaweditor.com/scripts/regex/index.php
      • 哇,谢谢!还有一件事,我如何删除&lt;br&gt; 之前 &lt;/div&gt;
      • 哦,来吧,这是你今天的作业;)括号表示“可选”,括号后的+表示“一个或多个”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 2012-10-30
      相关资源
      最近更新 更多