Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将嵌入代码附加到youtube锚定链接_Php_Regex_Youtube_Preg Replace - Fatal编程技术网

Php 如何将嵌入代码附加到youtube锚定链接

Php 如何将嵌入代码附加到youtube锚定链接,php,regex,youtube,preg-replace,Php,Regex,Youtube,Preg Replace,我使用此代码使URL可以作为论坛帖子中的锚链接单击 function makelink($str) { $str = preg_replace_callback('/((((http)(s)?:\/\/)|www\.)[-0-9æøåa-zA-Z?-??-?\(\)%_+\.~#?&;:@\/\/=]+)(?<!\.)/i', function($matches) { if (strtolower(substr($matches[0], 0 , 4)) =

我使用此代码使URL可以作为论坛帖子中的锚链接单击

function makelink($str) {

    $str = preg_replace_callback('/((((http)(s)?:\/\/)|www\.)[-0-9æøåa-zA-Z?-??-?\(\)%_+\.~#?&;:@\/\/=]+)(?<!\.)/i', function($matches) {
        if (strtolower(substr($matches[0], 0 , 4)) == 'www.') {
            $matches[0] = 'http://' . $matches[0];
        }
        return '<a href="'.$matches[0].'" title="link" rel="noreferrer">'.$matches[0].'</a>';
    }, $str);
    
    return trim($str);

}
函数makelink($str){
$str=preg\u replace\u callback('/((http)(s):\/\/)\124; www\.[-0-9æåa-zA-Z?-?\(\)%\+.~+&;:@\/=]+)(?
我如何制作一些代码来替换生成的锚(如果是youtube链接):


为此:

<a href="https://www.youtube.com/watch?v=LOLAy72Tv24" title="link" rel="noreferrer">https://www.youtube.com/watch?v=LOLAy72Tv24</a>
<br />
<iframe class="youtube" width="350" height="250" src="https://www.youtube.com/embed/LOLAy72Tv24/" allowfullscreen></iframe>



因此,它只需要获取视频id,并在原始链接下插入嵌入代码,同时将两者一起输出。

以下是我建议的解决方案:

函数makelink($str){
$pattern='/(((http)(s):\/\/)(www\.)[-0-9æåa-zA-Z?-?(\)%\+.~\?&;:@\/\/=]+)(?')。makeiFrame($matches[0]);
}
返回$html;
}美元/平方米);
返回修剪($str);
}
函数isYouTubeVideoUrl(字符串$url):bool
{
返回(parse_url($url,PHP_url_HOST)==“www.youtube.com”| | isYouTubeShortUrl($url))
&&strpos(parse_url($url,PHP_url_QUERY),'v=')!==false;
}
函数isYouTubeShortUrl(字符串$url):bool
{
返回parse_url($url,PHP_url_HOST)=='youtu.be';
}
函数makeiFrame(string$url):string{
$embedUrl=https://www.youtube.com/embed/“.getYouTubeVideoId($url)。”/;
返回“”;
}
函数getYouTubeVideoId(string$url):string
{
如果(isYouTubeShortUrl($url)){
preg_match('/[^\/]+$/',$url,$matches);
返回$matches[0];
}

预赛/(?用于确定url主机是否为YouTube,如果是,请附加您需要的内容。@El_Vanja谢谢。但我有点不知道如何编写替换/附加代码。链接/url位于文本中,它不是一个只有链接/url的静态字符串。这说明了这一点吗?除了添加代码之外,我没有更改您的
makelink
函数t追加
iframe
。它仍然负责从文本中提取
url
s。在您的代码在文本中找到一个
url
匹配项后,我的代码将继续工作。好的,谢谢,我很快就会查看它:)您好。它似乎工作正常,谢谢。但是如果url指向主网站youtube.com(没有视频,只需链接到youtube)它会触发一个偏移错误。有什么办法可以避免吗?也许是这样,如果有视频,它只会触发嵌入等id@mowgli我已经修改了代码来说明这一点(供将来的读者使用)。我还将函数从
isyoutubeeurl
重命名为
isYouTubeVideoUrl
,以更准确地反映它检查的内容。我唯一不知道的是,短URL是否可以是视频以外的内容(我查看了一个频道,但没有找到任何选项)。如果它证明了这一点,那么你也必须对此做出解释。
<a href="https://www.youtube.com/watch?v=LOLAy72Tv24" title="link" rel="noreferrer">https://www.youtube.com/watch?v=LOLAy72Tv24</a>
<br />
<iframe class="youtube" width="350" height="250" src="https://www.youtube.com/embed/LOLAy72Tv24/" allowfullscreen></iframe>