当前位置:  开发笔记 > 编程语言 > 正文

从PHP中的文本中提取URL

如何解决《从PHP中的文本中提取URL》经验,为你挑选了6个好方法。

我有这个文字:

$string = "this is my friend's website http://example.com I think it is coll";

如何将链接提取到另一个变量?

我知道它应该是通过使用正则表达式,preg_match()但我不知道如何?



1> Nobu..:

可能最安全的方法是使用WordPress的代码片段.下载最新版本(目前为3.1.1)并查看wp-includes/formatting.php.有一个名为make_clickable的函数,它有param的纯文本并返回格式化的字符串.您可以获取用于提取URL的代码.虽然这很复杂.

这一行正则表达式可能会有所帮助.

preg_match_all('#\bhttps?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#', $string, $match);

但是这个正则表达式仍然无法删除一些格式错误的URL(例如http://google:ha.ckers.org).

另请参见: 如何模拟StackOverflow自动链接行为


我玩过Wordpress formatting.php,使用make_clickable是一个不错的主意,但它最终吸收了一半依赖的wordpress.

2> Mikael Roos..:

我尝试按照Nobu的说法,使用Wordpress,但是为了与其他WordPress函数有很多依赖关系,我选择使用Nobu的正则表达式preg_match_all()并将其转换为函数,使用preg_replace_callback(); 一个函数,它现在用可点击的链接替换文本中的所有链接.它使用匿名函数,因此您需要PHP 5.3,或者您可以重写代码以使用普通函数.

]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#';
    return preg_replace_callback($regex, function ($matches) {
        return "{$matches[0]}";
    }, $text);
}


Just a note: I've updated your answer to use a anonymous function as a callback instead of using `create_function()`.

3> soulmerge..:

URL的定义非常复杂 - 您必须先确定要捕获的内容.开始一个简单的例子捕捉任何与http://https://可能是:

preg_match_all('!https?://\S+!', $string, $matches);
$all_urls = $matches[0];

请注意,这是非常基本的,可能会捕获无效的网址.我建议赶上POSIX和PHP正则表达式来处理更复杂的事情.



4> Michael Borg..:

如果您从中提取URL的文本是用户提交的,并且您将在任何地方将结果显示为链接,那么您必须非常非常小心地避免XSS漏洞,最突出的是"javascript:"协议URL,但也会出现格式错误网址可能会诱使你的正则表达式和/或显示浏览器进入执行它们的JavaScript网址.至少,您应该只接受以"http","https"或"ftp"开头的网址.

Jeff 还有一篇 博客文章,其中描述了提取URL的其他一些问题.



5> Shankar Damo..:

你可以这样做..



6> Kai Noack..:

适合我的代码(特别是如果你的$ string中有几个链接)是:

$string = "this is my friend's website http://example.com I think it is cool, but this is cooler http://www.memelpower.com :)";
$regex = '/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i';
preg_match_all($regex, $string, $matches);
$urls = $matches[0];
// go over all links
foreach($urls as $url) 
{
    echo $url.'
'; }

希望能帮助他人.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有