【问题标题】:change youtube url to embed url in php将 youtube url 更改为在 php 中嵌入 url
【发布时间】:2013-03-02 08:09:37
【问题描述】:

我发现此代码 (Swap all youtube urls to embed via preg_replace()) 将 youtube 网址 (http://www.youtube.com/watch?v=CfDQ92vOfdchttp://www.youtube.com/v/CfDQ92vOfdc) 交换为 youtube 嵌入网址 (http://www.youtube.com/embed/CfDQ92vOfdc) 但它似乎不起作用?有任何想法吗?我对正则表达式了解不多。

代码如下:

$string     = 'http://www.youtube.com/watch?v=CfDQ92vOfdc';
$search     = '#<a (?:.*?)href=["\\\']http[s]?:\/\/(?:[^\.]+\.)*youtube\.com\/(?:v\/|watch\?(?:.*?\&)?v=|embed\/)([\w\-\_]+)["\\\']#ixs';
$replace    = 'http://www.youtube.com/embed/$2';
$url        = preg_replace($search,$replace,$string);

但它仍然显示为:

http://www.youtube.com/watch?v=CfDQ92vOfdc

代替:

http://www.youtube.com/embed/CfDQ92vOfdc

提前致谢。

【问题讨论】:

  • 它正在寻找一个锚标记,而不仅仅是一个 URL。你的字符串应该是&lt;a href="...
  • 啊,我明白了,谢谢你的帮助:)

标签: php regex youtube preg-replace


【解决方案1】:

一个问题是您的表达式需要地址周围的 a-href 标记。 另一个问题是您的 $replace 字符串使用了不会解析 $2 的单引号。

这个更简单的表达式应该可以工作:

$string     = 'http://www.youtube.com/watch?v=CfDQ92vOfdc';
$search     = '/youtube\.com\/watch\?v=([a-zA-Z0-9]+)/smi';
$replace    = "youtube.com/embed/$1";    
$url = preg_replace($search,$replace,$string);
echo $url;

【讨论】:

  • 非常酷;目前在生产中使用它的修改版本。谢谢!
【解决方案2】:

任意更改

$string = 'http://www.youtube.com/watch?v=CfDQ92vOfdc';

$string = '&lt;a href="http://www.youtube.com/watch?v=CfDQ92vOfdc" &gt;&lt;/a&gt;';

$search     = '#<a (?:.*?)href=["\\\']http[s]?:\/\/(?:[^\.]+\.)*youtube\.com\/(?:v\/|watch\?(?:.*?\&)?v=|embed\/)([\w\-\_]+)["\\\']#ixs'; 

$search     = '#(.*?)(?:href="https?://)?(?:www\.)?(?:youtu\.be/|youtube\.com(?:/embed/|/v/|/watch?.*?v=))([\w\-]{10,12}).*#x';

【讨论】:

  • 这对我很有用,因为我不需要 a 标签。谢谢你:)
【解决方案3】:

如果有人仍在寻找更好的直接解决方案, 在这里,我只是在玩你的代码,直到它给了我一个简单的解决方案。

$string     = $content;

$search = '/www.youtube\.com\/watch\?v=([a-zA-Z0-9]+)/smi';

$replace = "<iframe width='560' height='315' src='https://youtube.com/embed/$1' frameborder='0' allowfullscreen></iframe> ";
$content = preg_replace($search,$replace,$string);

注意:要选择您希望如何处理链接,只需编辑 $search 部分, 如果您要从 www.youtube.com 处理,它将是 $search = '/www.youtube\.com\/watch\?v=([a-zA-Z0-9]+)/smi';

否则,如果您希望它仅处理 youtube.com 链接,只需删除 www. $search = '/youtube\.com\/watch\?v=([a-zA-Z0-9]+)/smi';

【讨论】:

    【解决方案4】:

    这是我写的一个函数,你回显了结果:

    function youtube_url_to_embed($youtube_url) {
        $search = '/youtube\.com\/watch\?v=([a-zA-Z0-9]+)/smi';
        $replace = "youtube.com/embed/$1";
        $embed_url = preg_replace($search,$replace,$youtube_url);
        return $embed_url;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-13
      • 2015-12-03
      • 2014-06-22
      • 2013-03-27
      • 2012-01-22
      • 2012-08-03
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多