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

时间:2013-10-14 21:30:29

标签: php

我不确定我是否以正确的方式解决这个问题。我想采取一个简单的链接,像这样;

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是正确的方法吗?

2 个答案:

答案 0 :(得分:1)

这是一种简单的方法......

// $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&amp; t = 123),那么这将无效,您必须更像URL(即不使用str_replace)解析URL。 / p>

答案 1 :(得分:1)

您可以使用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()更有效,即使视频网址中有其他查询参数也能正常工作。