2013-02-28 3 views
1

На нашем форуме мы в настоящее время заменить все YouTube ссылки с вложенными объектами, благодаря следующему ответу:YouTube встроенного видео pregreplace с временем начала

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

Обратите внимание на «# т = 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)?

ответ

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 
Смежные вопросы