php - 带有开始计时的youtube嵌入式视频pregreplace

标签 php string youtube forum

由于以下回答,我们目前在我们的论坛上将所有youtube链接替换为嵌入式对象:

How do I find all YouTube video ids in a string using a regex?

麻烦的是,许多用户希望将链接直接发布到视频中的特定时间。例如。:

http://www.youtube.com/watch?v=jECIv7zlD4c&feature=player_embedded#t=1m15s

请注意“#t = 1m15s”

根据youtube文档,当您将开始时间嵌入视频中时,需要使用“开始”参数,因此不能使用“1m15s”字符串。 “开始”是基于秒数的值。

<object width="425" height="344">
<param name="movie" value="http://www.youtube.com/v/jECIv7zlD4c?fs=1&start=75"</param>
<param name="allowFullScreen" value="true"></param>
<param name="allowScriptAccess" value="always"></param>
<embed src="http://www.youtube.com/v/jECIv7zlD4c?fs=1&start=75"
type="application/x-shockwave-flash" allowscriptaccess="always" width="425" height="344">
</embed>
</object>

他们有办法用'&start = 75'替换正则表达式中的'#1m15s'吗?

如果不是,您如何建议使用PHP来完成,以便它将以递归方式在论坛帖子中构建对象(有时人们会发布多个youtube视频链接)?

最佳答案

preg_replace用于操作字符串。在您的情况下,您必须先进行一些更换。

也许您应该尝试改用preg_replace_callback,给出将进行计算的回调(X * 60 + Y)。

function sumMinSec($matches)
{
    $minSecMatches = array();
    preg_match("/([0-9]*)m([0-9]*)s/", $matches[0], $minSecMatches);
    return "&start=" . ($minSecMatches[1] * 60 + $minSecMatches[2]);
}

然后调用类似:
$url = "http://www.youtube.com/v/jECIv7zlD4c?fs=1#1m23s";
echo preg_replace_callback("/#([0-9]*m[0-9]*s)/", "sumMinSec", $url);

那么结果是:
http://www.youtube.com/v/jECIv7zlD4c?fs=1&start=83

关于php - 带有开始计时的youtube嵌入式视频pregreplace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15147993/

相关文章:

php - 在放入数据库之前在php中设置日期

php - 当发出请求并且客户端立即退出时,服务器会发生什么?

php - 如何在对结果进行分页的网址中发送搜索词

javascript - 如何在ejs中使用带有字符串的if语句?

javascript - 如何使用 lytebox 显示 YouTube 视频?

php - YouTube数据API返回的结果多于maxResults

php - 我怎样才能完全销毁 session 。如果 session 不可用,则重定向到登录页面

php - 在 PHP 中仅用一个空格替换多个空格和换行符

java - 如何将 JsonString 转换为 String?

php - 如何使用PHP创建YouTube视频库