使用 str_replace 将链接格式化为具有嵌入超链接的图像


Using str_replace to format a link into an image with embeded hyperlink

>我不确定我是否以正确的方式做到这一点。 我想采取一个简单的链接,像这样;

https://www.youtube.com/watch?v=examplevideo

并将其变成

<a href= 'https://www.youtube.com/embed/examplevideo' target=_blank><img src='http://img.youtube.com/vi/examplevideo/0.jpg' width='536' border='1'></a>

过去,我已经能够使用str_replace来更改链接,这非常简单,因为您可以拉出一种模式并将其替换为另一种模式。 但是,在这种情况下,保留的模式在输出中显示两次。 str_replace是正确的方法吗?

这里有一个简单的方法...

// $video_url = "https://www.youtube.com/watch?v=examplevideo";
$videoId = str_replace("https://www.youtube.com/watch?v=", "", $video_url);
enter code here
$videoLink = "<a href= 'https://www.youtube.com/embed/$videoId' target=_blank><img src='http://img.youtube.com/vi/$videoId/0.jpg' width='536' border='1'></a>"
当然,如果你的URL

更复杂(例如?v=abc&t=123),那么这是行不通的,你必须像URL一样解析URL(即不使用str_replace)。

可以使用

parse_url()parse_str()获取视频 ID,然后使用 sprintf() 生成嵌入代码。

我做了一个小函数:

function getEmbedded($url) {
    $parts = parse_url($url);
    $parsed = parse_str($parts['query'], $params);
    $result = sprintf("<a href= 'https://www.youtube.com/embed/%s' 
        target=_blank><img src='http://img.youtube.com/vi/%s/0.jpg' 
        width='536' border='1'></a>", $params['v'],$params['v']);
    return $result;
}

用法:

echo getEmbedded($url);

这比使用 str_replace() 更有效,即使视频 URL 中有其他查询参数也能正常工作。