2010-01-26 3 views
3

i besoin d'un preg_match() syntaxe ou quelque chose de similaire pour extraire JPG ou PNG ou GIF URL à partir d'un texte et les mettre dans un tableau ou enfin le premier magasin url.Tout preg_match() pour extraire des URL d'image du texte?

peut-être une syntaxe qui searchs pour les chaînes qui commencent par http et se terminant par jpg/png/gif ..

je crois qu'il peut être fait avec preg_match()

Note: le texte peut être comme ça: blablablabla "http://www.example.com/xxx.jpg" blablablabla

Répondre

11

S'il vous plaît noter les occasions spéciales où ils ca n tromper votre serveur en insérant de fausses correspondances.

Par exemple:

http://www.myserver.com/virus.exe?fakeParam=.jpg 

Ou

http://www.myserver.com/virus.exe#fakeParam=.jpg 

J'ai modifié rapidement le regex pour éviter ce cas, mais je suis assez sûr qu'il pourrait y avoir plus (comme l'insertion% 00 le chemin du fichier, par exemple, et ne peut pas être facilement analysable par une expression régulière)

$matches = array(); 
preg_match_all('!http://[^?#]+\.(?:jpe?g|png|gif)!Ui' , $string , $matches); 

Ainsi, pour la sécurité, utilisez alway Si vous connaissez le serveur, écrivez-le dans la regex, ou si vous savez que le chemin comprendra toujours des lettres, des traits d'union, des points, des barres obliques et des chiffres, utilisez une expression comme:

$matches = array(); 
preg_match_all('!http://[a-z0-9\-\.\/]+\.(?:jpe?g|png|gif)!Ui' , $string , $matches); 

Cela devrait éviter toute surprise amusante dans le futur.

+0

merci, je vérifie toujours pour mimes après avoir obtenu l'image url: D – Ryan

+0

Le type mime est un en-tête vous pouvez modifier. Si vous voulez essayer ceci, installez un plugin pour firefox appelé TamperData. Vous pouvez voir dans les pétitions la valeur de cet en-tête et que cela pourrait être changé. C'est une bonne pratique, mais vous devez également vous assurer que le nom de fichier final se termine par .jpg ou la bonne extension. –

+1

Ne pouvez-vous pas utiliser exif_imagetype() pour vérifier une image valide? – jeroen

5
$matches = array(); 
preg_match_all('!http://.+\.(?:jpe?g|png|gif)!Ui' , $string , $matches); 
+1

Je pense que vous devez faire non gourmand: « http: //.+ \ (:.? Jpe ? g | png | gif)! i '(remarquez le point d'interrogation après le +) sinon il va correspondre entre le premier http: // jusqu'à la dernière extension correspondante. – jeroen

+0

Salut, merci beaucoup, il donne un tableau vide, des idées? :) – Ryan

+0

@jeroen: votre droit sur la chose gourmande. Je l'ai corrigé. @Tom: un exemple de $ string qui donne un tableau vide? (Je voudrais réparer ce qui doit être réparé!) – OcuS

0

Mise à jour pour le cas il y a préfixe http/https en option, par exemple:

http://example.com/image.jpg 

https://example.com/image.jpg 

//example.com/image.jpg 




      function extractImageUrlFromText($text) 
      { 
       preg_match_all('!(https?:)?//\S+\.(?:jpe?g|jpg|png|gif)!Ui', $text, $matches); 
       return $$matches[0]; 
      } 
Questions connexes