【问题标题】:How to remove a link from content in php?如何从php中的内容中删除链接?
【发布时间】:2011-04-19 08:17:45
【问题描述】:

如何删除链接并保留文本?

text text text. <br><a href='http://www.example.com' target='_blank' title='title' style='text-decoration:none;'>name</a>

像这样:

text text text. <br>

我还是有问题.....

$text = file_get_contents('http://www.example.com/file.php?id=name');
echo preg_replace('#<a.*?>.*?</a>#i', '', $text)

在那个网址中是那个文本(带有链接)......

此代码不起作用...

怎么了?

有人可以帮我吗?

【问题讨论】:

    标签: php hyperlink


    【解决方案1】:

    我建议你保留链接中的文字。

    strip_tags($text, '<br>');
    

    或困难的方式:

    preg_replace('#<a.*?>(.*?)</a>#i', '\1', $text)
    

    如果您不需要在链接中保留文字

    preg_replace('#<a.*?>.*?</a>#i', '', $text)
    

    【讨论】:

    • 他没有表示他希望保留姓名
    • preg_replace('#.*?#i', '', $text) 帮助了我
    • 很棒的答案,您可以添加 s 标志以使其适用于跨越多行的链接preg_replace('#&lt;a.*?&gt;(.*?)&lt;/a&gt;#is', '\1', $text)
    【解决方案2】:

    虽然strip_tags() 能够进行基本的字符串清理,但它并不是万无一失的。如果您需要过滤的数据来自用户,特别是如果它会显示给其他用户,您可能需要研究更全面的 HTML 清理程序,例如 HTML Purifier。这些类型的库可以让您免去很多麻烦。

    strip_tags() 和各种正则表达式方法不能也不会阻止真正想要注入东西的用户。

    【讨论】:

      【解决方案3】:

      试试:

      preg_replace('/<a.*?<\/a>/','',"test test testa<br> <a href='http://www.example.com' target='_blank' title='title' style='text-decoration:none;'>name</a>");
      

      【讨论】:

      • 最好使用/&lt;a\s.*?&lt;\/a&gt;/来忽略&lt;abbr&gt;&lt;article&gt;等标签
      【解决方案4】:

      这是我的解决方案:

      function removeLink($str){
      $regex = '/<a (.*)<\/a>/isU';
      preg_match_all($regex,$str,$result);
      foreach($result[0] as $rs)
      {
          $regex = '/<a (.*)>(.*)<\/a>/isU';
          $text = preg_replace($regex,'$2',$rs);
          $str = str_replace($rs,$text,$str);
      }
      return $str;}
      

      【讨论】:

        【解决方案5】:

        strip_tags() 将去除 HTML 标签。

        【讨论】:

        • 问题是关于删除链接,而不是整个 HTML 格式。
        【解决方案6】:

        试试这个。很简单!

        $content = "text text text. <br><a href='http://www.example.com' target='_blank' title='title' style='text-decoration:none;'>name</a>";
        echo preg_replace("/<a[^>]+\>[a-z]+/i", "", $content);
        

        输出:

        text text text. <br>
        

        【讨论】:

          【解决方案7】:

          试试:

          $string = preg_replace( '@<(a)[^>]*?>.*?</\\1>@si', '', $string );
          

          注意: 此代码删除带有文本的链接。

          【讨论】:

            【解决方案8】:

            另一个没有正则表达式的简短解决方案:

            function remove_links($s){
                while(TRUE){
                    @list($pre,$mid) = explode('<a',$s,2);
                    @list($mid,$post) = explode('</a>',$mid,2);
                    $s = $pre.$post;
                    if (is_null($post))return $s;
                }
            }
            ?>
            

            【讨论】:

            • Regex 比使用这样的字符串操作的 while 循环更简单、更省钱且效率更高。试想HTML代码中包含&lt;abbr&gt;,那么这段代码可能会丢失很多文字...
            • 同意你的看法。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-08-23
            • 1970-01-01
            • 2016-04-26
            • 1970-01-01
            • 2011-06-19
            相关资源
            最近更新 更多