【问题标题】:youtube embedded video pregreplace with start timingyoutube 嵌入式视频 pregreplace 与开始时间
【发布时间】:2013-02-15 09:06:12
【问题描述】:

我们目前在我们的论坛上将所有 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”字符串。 '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>

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

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

【问题讨论】:

    标签: php string youtube forum


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      • 2019-05-17
      • 2014-06-09
      相关资源
      最近更新 更多