2010-12-12 60 views
0

je fais un bbcode pour les vidéos youtube.User peut poster une vidéo comme bbcode par exemple comme [youtube] http://www.youtube.com/watch?v=ihK2pPcDSHM [/ Youtube]. Ensuite, il va le convertir en code html. Mais au lieu de la vidéo, je veux montrer aussi l'image de la vidéo. Donc, je le fais comme ceci:Comment utiliser substr à regexp de preg remplacer

$string = preg_replace("~\[yt]http://www.youtube.com/watch\?v=(.*)\[/yt]~Uis","<img src=\"http://img.youtube.com/vi/\\1/0.jpg\" />", $string); 

Il montre l'image, mais quand quelqu'un met une URL comme:

http://www.youtube.com/watch?v=ihK2pPcDSHM&feature=channel 

l'URL de l'image devient http://img.youtube.com/vi/ihK2pPcDSHM&feature=channel1/0.jpg qui ne conduit pas à une image valide. J'essaye de changer le \\1 en ".substr('\\1', 0,11)." mais il n'a aucun résultat.

Une suggestion pour résoudre ce problème? Merci!

Répondre

0

Essayez un modèle différent comme:

~\[yt]http://www\.youtube\.com/watch\?v=([a-z0-9-_]+).*?\[/yt]~is 
+0

grâce, mais cela a donné lieu à retourner une seule lettre. l'URL de l'image est donc devenue http://img.youtube.com/vi/l/0.jpg –

+0

@ user539649: Êtes-vous sûr de faire une correspondance insensible à la casse? – Gumbo

+0

hm ... qu'est-ce que vous voulez dire? : S je veux juste montrer l'image. Ai-je fait quelque chose de mal au code? –

0

Il suffit de dire votre regex pour arrêter le premier caractère &:

$string = preg_replace("~\[yt]http://www.youtube.com/watch\?v=([^\\&]*)\[/yt]~Uis","<img src=\"http://img.youtube.com/vi/\\1/0.jpg\" />", $string); 
+0

Merci, mais maintenant il ne le remplace pas. Il montre le bbcode sans le remplacer :( –

+0

La quantité de barres obliques inverses peut-être mal, essayez de vous débarrasser des barres obliques inverses à l'intérieur de '[^ \\ &]'. – moeffju