【问题标题】:php regex change youtube links to videosphp regex 将 youtube 链接更改为视频
【发布时间】:2013-09-03 07:23:55
【问题描述】:

我有将链接更改为可点击链接的功能,以及将 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;
}

【问题讨论】:

  • 首先发布以下格式:原始链接、可点击链接和嵌入链接...这将有所帮助:)
  • 链接只是任何常规链接,google.com。 ConvertMessages() 函数只接收整个消息并转换它找到的任何链接。所以它可能正是这篇文章,它将使谷歌链接可点击。
  • 请您出示您拨打convertMessages()的代码吗?
  • 没什么可展示的:
    ".convertMessages($Comment)."
  • 问题出在convertYouTube -> 在这里您首先检查 (preg_match) 是否有 youtube 链接,但随后 (preg_replace) 您仍然会替换所有链接。您需要做的是修改preg_replace,使其仅影响youtube URL。快速而肮脏:更改preg_replace 中的正则表达式,如下所示:"#(^|[\n ])([\w]+?://[\w]*youtu\.?be[\w]*+[^ \"\n\r\t&lt; ]*)#"(仍会贪婪地替换所有其他包含 youtube 的链接。例如 http://domain.tld/my-blog-about-youtube-foo-bar

标签: php regex youtube


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-12-02
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多