使用PHP修改超链接

时间:2010-01-27 23:24:15

标签: php url hyperlink

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

由于我允许某些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>

谢谢!

4 个答案:

答案 0 :(得分:5)

试试这个。

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 :(得分:1)

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

答案 2 :(得分:0)

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

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

我想我想念你的问题......有点类似于上面的内容而是寻找。

答案 3 :(得分:0)

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

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

应该部分实现您的目标,但在显示链接文本时不会删除链接。所以,我猜它确实没有。遗憾...