【问题标题】:Modify hyperlinks with PHP用 PHP 修改超链接
【发布时间】:2011-01-10 04:50:59
【问题描述】:

我正在使用正则表达式将博客 cmets 中的 URL 转换为可点击的超链接。但是,我也想做相反的事情:

由于我允许某些 html 标签(但不允许 <a>),如果有人输入超链接,我想将其更改为:

<a href="http://www.example.com">My Link</a>

进入

我的链接http://www.example.com

生成的代码在哪里:

<p><b>My Link:</b> <a href="http://www.example.com" rel="nofollow">http://www.example.com</a></p>

谢谢!

【问题讨论】:

    标签: php url hyperlink


    【解决方案1】:

    用正则表达式解析不规则语言是通向失败的捷径。请改用正确的HTML parser

    【讨论】:

      【解决方案2】:

      试试这个。

      function find_links($url){
          $pattern = '/<a (.*?)href="(.*?)\/\/(.*?)"(.*?)>(.*?)<\/a>/i';
          $url = preg_replace_callback($pattern, 'process_links',$url);
          return $url;
      }
      
      function process_links($m){
          return "{$m[5]} <a href=\"{$m[2]}//{$m[3]}\" rel=\"nofollow\">{$m[2]}//{$m[3]}</a>";
      }
      
      $links = find_links('<a href="http://www.example.com">My Link</a>');
      

      编辑:哎呀!我没有完全回答OP的问题。

      【讨论】:

      • 这种方法的唯一缺点是用户可以绕过正则表达式,并且在您硬编码匹配的部分时可能会中断。但它确实解决了问题。 +1
      • 嗯,这是一个快速修复。此外,如果链接是用单引号表示的,它将不匹配,但你明白了。
      • 另一个快速修复...每个人都需要一点 SEO:return "{$m[5]} {$m[2]}//{$m[3]}";
      【解决方案3】:

      您只需要搜索 www 或 http 然后转换该文本,直到您到达 url 的空格。

      Something like:
          $startPos = strpos( $input, "http" );
          $endPos = strpos( $input, " ", $startPos );
          $urlText = substr( $input, $startPos, $endPos - $startPos );
      

      我想我有点想念你的问题......类似于上面的东西,但正在寻找。

      【讨论】:

        【解决方案4】:

        好吧,如果您不介意一些 CSS(以及浏览器的实现差异):

        a {font-weight: bold; }
        a:after {content: " (" attr(href) ") "; }
        

        应该部分实现您的目标,尽管它不会在显示链接文本时删除链接。所以,真的,我猜它没有。对不起...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-28
          • 2012-10-16
          • 2017-01-07
          • 1970-01-01
          • 2015-09-27
          • 2012-08-29
          • 1970-01-01
          • 2014-04-21
          相关资源
          最近更新 更多