я делаю bbcode для видео на YouTube. Пользователь может опубликовать видео в виде bbcode, например, как [youtube] http://www.youtube.com/watch?v=ihK2pPcDSHM[/youtube]. Далее, он преобразует его в HTML-код. Но вместо видео я хочу показать также изображениевидео.Поэтому я делаю это так:
$string = preg_replace("~\[yt]http://www.youtube.com/watch\?v=(.*)\[/yt]~Uis","<img src=\"http://img.youtube.com/vi/\\1/0.jpg\" />", $string);
Показывает изображение, но когда кто-то ставит URL-адрес, например:
http://www.youtube.com/watch?v=ihK2pPcDSHM&feature=channel
Тогда URL-адрес изображения становится http://img.youtube.com/vi/ihK2pPcDSHM&feature=channel1/0.jpg, что не приводитк действительному изображению.Я пытаюсь изменить \\1 на ".substr('\\1', 0,11).", но это не дает никакого результата.
http://img.youtube.com/vi/ihK2pPcDSHM&feature=channel1/0.jpg
\\1
".substr('\\1', 0,11)."
Есть предложения, чтобы решить эту проблему?Спасибо!
Просто скажите своему регулярному выражению, чтобы он остановился на первом & символе:
&
$string = preg_replace("~\[yt]http://www.youtube.com/watch\?v=([^\\&]*)\[/yt]~Uis","<img src=\"http://img.youtube.com/vi/\\1/0.jpg\" />", $string);
Попробуйте другой шаблон, например:
~\[yt]http://www\.youtube\.com/watch\?v=([a-z0-9-_]+).*?\[/yt]~is