【问题标题】:Converting <br /> into a new line for use in a text area将 <br /> 转换为新行以在文本区域中使用
【发布时间】:2011-05-14 19:35:35
【问题描述】:

如果我有一个变量:

$var1 = "Line 1 info blah blah <br /> Line 2 info blah blah";

还有一个文本区域:

<textarea>echo $var1</textarea>

我怎样才能让文本区域显示一个新行,而不是在其中显示一个带有&lt;br /&gt; 的文本?

编辑:我尝试了以下方法:

<textarea class="hobbieTalk" id="hobbieTalk" name="hobbieTalk" cols="35" rows="5" onchange="contentHandler('userInterests',this.id,this.value,0)"><?php

$convert=$_SESSION["hobbieTalk"];
$convert = str_replace("<br />", "\n", $convert);
echo $convert;

?></textarea>

但是文本区域仍然在行中包含br 标记。

【问题讨论】:

标签: php html


【解决方案1】:

试试这个

<?php
    $text = "Hello <br /> Hello again <br> Hello again again <br/> Goodbye <BR>";
    $breaks = array("<br />","<br>","<br/>");  
    $text = str_ireplace($breaks, "\r\n", $text);  
?>  
<textarea><?php echo $text; ?></textarea>

【讨论】:

  • 谢谢大家:请注意,如果您使用转换后的 html 标记将此字符串存储在数据库中,则必须输入:$breaks = array("
    ","
    ","","
    ","<br />","<br/>","<br>");大家欢呼
  • $text = str_ireplace($breaks, "", $text);对我来说效果更好! :-)
  • @bestprogrammerintheworld for this $text = str_ireplace($breaks, "", $text);你可以使用strip_tags($text)
  • @Naumov 这将从字符串中删除所有标签,而不仅仅是 $breaks
  • @ManuelDallaLana 有问题在&lt;textarea&gt;&lt;?php echo $var1 ?&gt;&lt;/textarea&gt;中写下你需要的回显字符串,这意味着你只需要文本而不需要html实体。
【解决方案2】:

我正在使用以下构造来转换回 nl2br

function br2nl( $input ) {
    return preg_replace('/<br\s?\/?>/ius', "\n", str_replace("\n","",str_replace("\r","", htmlspecialchars_decode($input))));
}

我在这里替换了 $input 中的 \n\r 符号,因为 nl2br 没有删除它们,这会导致 \n\n\r&lt;br&gt; 的错误输出。

【讨论】:

    【解决方案3】:

    @Mobilpadde 的回答很好。但这是我使用preg_replace 使用正则表达式的解决方案,根据我的测试,这可能会更快。

    echo preg_replace('/&lt;br\s?\/?&gt;/i', "\r\n", "testing&lt;br/&gt;&lt;br /&gt;&lt;BR&gt;&lt;br&gt;");

    function function_one() {
        preg_replace('/<br\s?\/?>/i', "\r\n", "testing<br/><br /><BR><br>");
    }
    
    function function_two() {
        str_ireplace(['<br />','<br>','<br/>'], "\r\n", "testing<br/><br /><BR><br>");
    }
    
    function benchmark() {
        $count = 10000000;
        $before = microtime(true);
    
        for ($i=0 ; $i<$count; $i++) {
            function_one();
        }
    
        $after = microtime(true);
        echo ($after-$before)/$i . " sec/function one\n";
    
    
    
        $before = microtime(true);
    
        for ($i=0 ; $i<$count; $i++) {
            function_two();
        }
    
        $after = microtime(true);
        echo ($after-$before)/$i . " sec/function two\n";
    }
    benchmark();
    

    结果:

    1.1471637010574E-6 sec/function one (preg_replace)
    1.6027762889862E-6 sec/function two (str_ireplace)
    

    【讨论】:

      【解决方案4】:

      这是另一种方法。

      class orbisius_custom_string {
          /**
           * The reverse of nl2br. Handles <br/> <br/> <br />
           * usage: orbisius_custom_string::br2nl('Your buffer goes here ...');
           * @param str $buff
           * @return str
           * @author Slavi Marinov | http://orbisius.com
           */
          public static function br2nl($buff = '') {
              $buff = preg_replace('#<br[/\s]*>#si', "\n", $buff);
              $buff = trim($buff);
      
              return $buff;
          }
      }
      

      【讨论】:

        【解决方案5】:

        编辑:先前的答案与您想要的相反。使用 str_replace。 将&lt;br&gt; 替换为 \n

        echo str_replace('<br>', "\n", $var1);
        

        【讨论】:

        • 相反,将所有换行符转换为 br 标签。
        【解决方案6】:
        <?php
        
        $var1 = "Line 1 info blah blah <br /> Line 2 info blah blah";
        $var1 = str_replace("<br />", "\n", $var1);
        
        ?>
        
        <textarea><?php echo $var1; ?></textarea>
        

        【讨论】:

        • str_replace("
          ", "\n", $var1) - 失败它仍然产生
          输出
        • 您是否将 $var1 设置为等于?所以: $var1 = str_replace("
          ", "\n", $var1);
        • 不,我不知道。它创建了一个新行人,只是您的文本区域没有在键盘中呈现。
        • 不,我在 CodePad 中的示例确实有效。再看看你的例子。
        • 键盘不呈现文本区域,你在输出中看到文本区域还是标签
        猜你喜欢
        • 2013-10-20
        • 2012-11-01
        • 1970-01-01
        • 2013-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-25
        • 1970-01-01
        相关资源
        最近更新 更多