2011-01-17 7 views
0

J'ai quelques problèmes en utilisant Preg_replace et preg_match_all pour convertir une URL Youtube en code intégré. Oui, je sais que ce sujet a déjà touché dans stackoverflow mais pas exactement comme je le veux.Lien hypertexte Youtube vers le code d'intégration

Je peux obtenir l'ID d'une URL, sans html, avec qui:

http://(?:www\.)?youtu(?:be\.com/watch\?v=|\.be/)(\w*)(&(amp;)?[\w\?=]*)? 

Mais j'ai l'url formaté avec comme ceci:

<a href="http://www.youtube.com/watch?v=C9KAqhbIZ7o" class="comment-link">http://www.youtube.com/watch?v=C9KAqhbIZ7o</a> 

Et je veux convertir tout à ceci:

<object width="640" height="505"><param name="movie" value="http://www.youtube.com/v/C9KAqhbIZ7o?fs=1&amp;hl=es_ES&amp;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&amp;hl=es_ES&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="505"></embed></object> 

Quelqu'un peut faire un peu de magie et me dire l'expression correcte pour détecter toute l'URL, obtenir l'ID sur CE et convertir tous à un code intégré? Merci d'avance!

informations Mise à jour:

Afin d'aider et de le rendre un plus concis ...

J'ai ceci:

<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> 

Et je veux obtenir ceci:

<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&amp;hl=es_ES&amp;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&amp;hl=es_ES&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="505"></embed></object></p> 

Merci à tous pour votre aide, je l'apprécie vraiment!

+0

Comment recevez-vous la "url non formaté"? car obtenir le paramètre href de l'élément a est plus rapide. –

+0

Merci pour votre commentaire. Les URL sont formatées automatiquement, car Wordpress les convertit et je veux qu'elles continuent à fonctionner de cette façon. Et oui, je sais que c'est plus rapide mais je veux remplacer tous les éléments, pas seulement obtenir l'ID de la vidéo. – miduga

Répondre

2

Remplacez $ html par votre chaîne html qui a besoin d'être analysée.

$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&amp;hl=es_ES&amp;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&amp;hl=es_ES&amp;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; 
+0

Merci beaucoup !! :) Cela ne fonctionne pas comme prévu, parce que je dois conserver tout le texte du commentaire et ne remplacer l'url de la vidéo avec le code d'intégration et remplacer l'URL une fois (je l'ai testé et convertit deux fois). Merci pour l'effort!!! – miduga

+0

Cela fonctionne maintenant ... enlevé les entrées en double du tableau. –

+0

Cela fonctionne parfaitement !!!!! :) Merci merci merci merci !! Vous ne savez pas combien d'heures j'ai passées là-dessus. Merci!!! – miduga

3

J'utilise ce code

 // 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; 
+0

Eh bien ça peut marcher donc je n'ai plus qu'à me procurer un preg_match yo pour récupérer toutes les urls de youtube, c'est mon gros problème !! J'ai mis à jour la demande afin d'être plus explicite! Merci! – miduga