1

私たちのフォーラムでは、現在、次の回答のおかげで、すべての YouTube リンクを埋め込みオブジェクトに置き換えています。

正規表現を使用して文字列内のすべての YouTube 動画 ID を見つけるにはどうすればよいですか?

問題は、多くのユーザーがビデオ内の特定の時間へのリンクを直接投稿したいと考えていることです。例えば:

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

「#t=1m15s」に注意してください

YouTube のドキュメントによると、ビデオに開始時間を埋め込む場合、'start' パラメータが必要な場合、'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>

正規表現の「#1m15s」を「&start=75」に置き換える方法はありますか?

そうでない場合、フォーラムの投稿でオブジェクトを再帰的に構築するようにPHPで行うことをどのように提案しますか(人々は複数のYouTubeビデオリンクを投稿する場合があります)?

4

1 に答える 1

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
于 2013-03-01T00:19:05.930 に答える