У меня проблемы с использованием Preg_replace и preg_match_all для преобразования URL-адреса Youtube для встраивания кода.Да, я знаю, что эта тема уже затрагивалась в stackoverflow, но не совсем так, как я хочу.
Я могу получить идентификатор из URL-адреса, без HTML, с помощью этого:
http://(?:www\.)?youtu(?:be\.com/watch\?v=|\.be/)(\w*)(&(amp;)?[\w\?=]*)?
НоURL-адрес отформатирован так:
<a href="http://www.youtube.com/watch?v=C9KAqhbIZ7o" class="comment-link">http://www.youtube.com/watch?v=C9KAqhbIZ7o</a>
И я хочу преобразовать все это в это:
<object width="640" height="505"><param name="movie" value="http://www.youtube.com/v/C9KAqhbIZ7o?fs=1&hl=es_ES&rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/C9KAqhbIZ7o?fs=1&hl=es_ES&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="505"></embed></object>
Кто-нибудь может сделать немного магии и сказать мне правильное выражение дляопределить все URL, получить идентификатор один раз и преобразовать все в код для встраивания?Заранее большое спасибо!
Обновление информации:
Чтобы помочь и сделать его более кратким ...
У меня есть это:
<p>This is an example of comment</p><strong>Hi bold!</strong><p>Look a youtube url! <a href="http://www.youtube.com/watch?v=C9KAqhbIZ7o" class="comment-link">http://www.youtube.com/watch?v=C9KAqhbIZ7o</a></p>
И я хочу получить это:
<p>This is an example of comment</p><strong>Hi bold!</strong><p>Look a youtube url! <object width="640" height="505"><param name="movie" value="http://www.youtube.com/v/C9KAqhbIZ7o?fs=1&hl=es_ES&rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/C9KAqhbIZ7o?fs=1&hl=es_ES&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="505"></embed></object></p>
Спасибо всем за вашу помощь, я действительно ценю это!
Я использую этот код
// url of video $url = $row['url']; $id=0; // we get the unique video id from the url by matching the pattern preg_match("/v=([^&]+)/i", $url, $matches); if(isset($matches[1])) $id = $matches[1]; if(!$id) { $matches = explode('/', $url); $id = $matches[count($matches)-1]; } // this is your template for generating embed codes $code = '<div id="img_wrapper"><object width="640" height="458"><param name="movie" value="http://www.youtube.com/v/{id}&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/{id}&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></div>'; // we replace each {id} with the actual ID of the video to get embed code for this particular video $code = str_replace('{id}', $id, $code); echo $code;
Замените $ html вашей строкой html, которая требует анализа.
$html=<<<HTML <p>This is an example of comment</p><strong>Hi bold!</strong><p>Look a youtube url! <a href="http://www.youtube.com/watch?v=C9KAqhbIZ7o" class="comment-link">http://www.youtube.com/watch?v=C9KAqhbIZ7o</a></p> HTML; $regex="/v\=([\-\w]+)/"; preg_match_all($regex,$html,$out); $out[1]=array_unique($out[1]); foreach($out[1] as $o){ $reg="/(<a).*(youtube.com).*($o).*(\/a>)/"; $embed= <<<HTML <object width="640" height="505"><param name="movie" value="http://www.youtube.com/v/$o=1&hl=es_ES&rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/$o?fs=1&hl=es_ES&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="505"></embed></object> HTML; $html=preg_replace($reg,$embed, $html); } echo $html;