【问题标题】:PHP str_replace <br>, \r\n into Real New Line in MySQL [duplicate]PHP str_replace <br>,\r\n 到 MySQL 中的 Real New Line [重复]
【发布时间】:2017-11-07 03:57:12
【问题描述】:

我有一个带有&lt;br&gt; 标签的文本,我想将它作为新行保存到 MySQL 数据库中。不是 HTML 标签。

例如:

$string = 'some text with&lt;br&gt;tags here.'

我想像这样将它保存到 MySQL 中:

some text with tags here

str_replace 有什么权利用于此目的?谢谢。

【问题讨论】:

    标签: php


    【解决方案1】:

    PHP 中已经有一个函数可以将新行转换为 br,称为nl2br()。然而,反过来是不正确的。相反,您可以像这样创建自己的函数:

    function br2nl($string)
    {
        $breaks = array("<br />","<br>","<br/>");  
        return str_ireplace($breaks, "\r\n", $string); 
    }
    

    那么,只要你想使用它,只要这样调用它:

    $original_string = 'some text with<br>tags here.';
    $good_string = br2nl($original_string);
    

    有三点值得一提:

    1. 最好将数据完全按照用户输入的方式存储在数据库中,然后在检索时进行转换。当然,这取决于您在做什么。
    2. 某些系统(例如 Windows)使用 \r\n。一些系统如 Linux 和 Mac 使用 \n。某些系统(如旧 Mac 系统)用户 \r 用于换行符。鉴于此,特别是如果您选择使用上面的第 1 点,您可能更喜欢使用 PHP 常量 PHP_EOL 而不是 \r\n。无论您使用什么系统,这都会给出正确的换行符。
    3. 我上面贴的方法会比preg_replace更高效。但是,它没有考虑到非标准 HTML,例如 &lt;br /&gt; 和其他变体。如果您需要考虑这些变化,那么您应该使用preg_replace() 函数。话虽如此,人们可能会过度思考所有可能的变化,但仍然无法将它们全部考虑在内。例如,考虑&lt;br id="mybreak"&gt; 以及许多其他属性和空白的组合。

    【讨论】:

      【解决方案2】:

      您可以按照您的建议使用str_replace

      $string = 'some text with<br>tags here.';
      $string = str_replace('<br>', "\r\n", $string);
      

      虽然,如果您的 &lt;br&gt; 标签也可能被关闭,&lt;br /&gt;&lt;br/&gt;,则可能值得考虑使用 preg_replace

      $string = 'some text with<br>tags here.';
      $string = preg_replace('/<br(\s+\/)?>/', "\r\n", $string);
      

      【讨论】:

        【解决方案3】:

        来试试这个。这会将所有&lt;br&gt; 替换为\r\n

        $string = 'some text with<br>tags here.';
        str_replace("<br>","\r\n",$string);
        echo $string;
        

        输出:

        some text with
        tags here.
        

        【讨论】:

          【解决方案4】:

          您可以使用htmlentities——将所有HTML字符转换为实体和html_entity_decode将HTML实体转换为字符

          $string = 'some text with<br>tags here'
          
          $a = htmlentities($string);
          
          $b = html_entity_decode($a);
          
          echo $a; // some text with&lt;br&gt;tags here
          
          echo $b; // some text with<br>tags here
          

          【讨论】:

            【解决方案5】:

            试试看:

            mysql_real_escape_string

            function safe($value){
                return mysql_real_escape_string($value);
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2014-07-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-09-02
              • 1970-01-01
              相关资源
              最近更新 更多