首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Regex PHP -自动检测YouTube,图像和“常规”链接

Regex PHP -自动检测YouTube,图像和“常规”链接
EN

Stack Overflow用户
提问于 2011-11-06 20:35:16
回答 3查看 4K关注 0票数 4

我想让它在我的聊天应用程序中,到网站的链接可以点击,到YouTube和图像的链接自动嵌入。

我已经为我的WebIRC客户端用Java语言编写了这段代码,但现在我正在尝试用PHP语言和JavaScript编写。

我还不熟悉PHP,所以我不太了解如何在PHP中使用regex。我想知道有没有仁慈的灵魂能帮我...

对于YouTube之类的东西,我尝试了一下,但没有成功:

代码语言:javascript
运行
复制
if (preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#", $message, $m)) {
    $video_id = $m[1];
    $message = preg_replace("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#","<iframe class='embedded-video' src='http://www.youtube.com/embed/" . $video_id . "' allowfullscreen></iframe>",$message);
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-06 21:04:13

这是我想出的一个解决方案:

代码语言:javascript
运行
复制
$str = 'This is an image: google.ca/images/srpr/logo3w.png

YouTube: http://www.youtube.com/watch?v=V2b8ilapFrI&feature=related

Stackoverflow:  http://stackoverflow.com/';

$str = preg_replace_callback('#(?:https?://\S+)|(?:www.\S+)|(?:\S+\.\S+)#', function($arr)
{
    if(strpos($arr[0], 'http://') !== 0)
    {
        $arr[0] = 'http://' . $arr[0];
    }
    $url = parse_url($arr[0]);

    // images
    if(preg_match('#\.(png|jpg|gif)$#', $url['path']))
    {
        return '<img src="'. $arr[0] . '" />';
    }
    // youtube
    if(in_array($url['host'], array('www.youtube.com', 'youtube.com'))
      && $url['path'] == '/watch'
      && isset($url['query']))
    {
        parse_str($url['query'], $query);
        return sprintf('<iframe class="embedded-video" src="http://www.youtube.com/embed/%s" allowfullscreen></iframe>', $query['v']);
    }
    //links
    return sprintf('<a href="%1$s">%1$s</a>', $arr[0]);
}, $str);

如果你需要我为你澄清什么,请告诉我。

票数 14
EN

Stack Overflow用户

发布于 2013-12-09 10:51:04

当文本包含三个点的...时,我对preg_replace_callback有一些问题。上面的代码将这三个点识别为URL,但这不是真的。

以下是我的解决方案,目前似乎有效,$str = preg_replace_callback('#(?:https?://\S+)|(?:www.\S+)|(?:jpe?g|png|gif)#', function($arr)

此修复在其他情况下会失败吗?

票数 2
EN

Stack Overflow用户

发布于 2016-10-23 10:16:21

Tim Cooper的代码不适用于https链接。例如:https://www.facebook.com/它将返回http://https://www.facebook.com/

替换

代码语言:javascript
运行
复制
if(strpos($arr[0], 'http://') !== 0)

通过

代码语言:javascript
运行
复制
if(strpos($arr[0], 'http') !== 0)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8027023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档