php - PHP正则表达式更改YouTube链接到视频

标签 php regex youtube

我具有将链接更改为可点击链接的功能,以及将youtube链接更改为嵌入式视频的功能。

但是,如果您先发布youtube视频,然后发布常规链接,则所有链接都会变成youtube视频。

如何编辑功能,仅将youtube链接更改为嵌入式视频而忽略常规链接?

function convertLinks($Link) {
    $Link = preg_replace(
            "#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t< ]*)#",
            "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>",
            $Link);
    $Link = preg_replace(
            "#(^|[\n ])((www|ftp)\.[^ \"\t\n\r< ]*)#",
            "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>",
            $Link);
    return $Link;
}
function convertYouTube($Link) {
    if (preg_match(
            '%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i',
            $Link,
            $match)) {
        $video_id = $match[1];
        $Link = htmlspecialchars_decode(
                preg_replace(
                        "#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t< ]*)#",
                        "\\1<iframe width=\"640\" height=\"360\" src=\"http://www.youtube.com/embed/$video_id\" frameborder=\"0\" allowfullscreen></iframe>",
                        $Link));
    }
    return $Link;
}
function convertMessages($Comment) {

    $Comment = convertYouTube($Comment);
    $Comment = convertLinks($Comment);

    return $Comment;
}

最佳答案

我想我知道ukautz来自哪里;您在preg_match中找到了某些仅限youtube的链接文本,但是在preg_replace中,您的正则表达式并不关心youtube特定的文本。如果您能够以某种方式在preg_match匹配之前隔离出链接,则应该可以解决此问题;但是,更简单的解决方案可能是将preg_match正则表达式与preg_replace正则表达式结合使用。

关于php - PHP正则表达式更改YouTube链接到视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18535025/

相关文章:

php - laravel redirect::back() 重定向到 favicon

php 测验在两个不同的结果集中有问题和答案

javascript - 字母数字、破折号和下划线但没有空格正则表达式检查 JavaScript

regex - 查找多次出现的单词

php - 搜索和嵌入 youtube 视频的脚本

youtube - YouTube:有什么方法可以获取用户观看的视频列表?

javascript - 选中/取消选中所有复选框仅选中 1 个复选框,但返回所有其他复选框值

php - 此连接语句如何产生此结果

python - 为什么这个 Jinja nl2br 过滤器会转义 <br >'s but not <p>' s?

php - 有什么方法可以检查用户是否已经订阅了我的 YouTube channel ?