Предварительная установка встроенного видео в YouTube
На нашем форуме мы в настоящее время заменяем все ссылки на YouTube со встроенными объектами, благодаря следующему ответу:
Как найти все идентификаторы видео YouTube в строке с использованием регулярного выражения?
Беда в том, что многие из наших пользователей хотят опубликовать ссылку непосредственно на время участия в видео. Например:.
http://www.youtube.com/watch?v=jECIv7zlD4c&feature=player_embedded#t=1m15s
Обратите внимание на "# 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' в regex с '& start = 75'?
Если нет, как бы вы предположили, что это будет сделано с PHP, чтобы он рекурсивно создавал объекты в сообщении на форуме (иногда люди публикуют несколько видеороликов YouTube)?
Ответы
Ответ 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