在我们的论坛上,我们目前用嵌入对象替换了所有 YouTube 链接,感谢以下答案:
如何使用正则表达式查找字符串中的所有 YouTube 视频 ID?
问题是,我们的许多用户希望直接发布指向视频中特定时间的链接。例如。:
注意“#t=1m15s”
根据 youtube 文档,当您将开始时间嵌入到需要“start”参数的视频时,您不能使用“1m15s”字符串。 “start”是一个基于秒数的值。
<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>
他们是否可以将正则表达式中的“#1m15s”替换为“&start=75”?
如果没有,您建议如何使用 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)