2010-07-30 4 views
1

Ce que je veuxCréer tag Img depuis l'URL


Si l'URL dans la chaîne contient un .jpg à la fin de l'URL (pas la chaîne), il doit faire une image de celui-ci avec preg_replace sinon faire un lien normal.

donc par exemple:

Si je http://www.example.com/images/photo.jpg alors il faut remplacer par:

<img src="http://www.example.com/images/photo.jpg" alt="http://www.example.com/images/photo.jpg">

Le problème:


L'URL est remplacée par un lien de toute façon et mon regex ne fonctionne pas :(.

Ce que j'ai essayé:


 $content = preg_replace("/(http:\/\/[^\s]+(?=\.jpg))/i","<img src=\"$1\" alt = \"$1\"></img>",$content);  

     $content = nl2br(preg_replace("/(http:\/\/[^\s]+(?!\.jpg))/m", "<a href=\"$1\" rel=\"nofollow\" target=\"blank\" title=\"$1\" class=\"news-link\">$1</a>", $content)); 

Répondre

2

Essayez cette

function replace_links($content) 
{ 
    if (preg_match('#(http://[^\s]+(?=\.(jpe?g|png|gif)))#i', $content)) 
    { 
     $content = preg_replace('#(http://[^\s]+(?=\.(jpe?g|png|gif)))(\.(jpe?g|png|gif))#i', '<img src="$1.$2" alt="$1.$2" />', $content); 
    } 
    else 
    { 
     $content = preg_replace('#(http://[^\s]+(?!\.(jpe?g|png|gif)))#i', '<a href="$1" rel="nofollow" target="blank" title="$1" class="news-link">$1</a>', $content); 
    } 

    return $content; 
} 
+0

Hey! Merci pour votre réponse :), j'ai essayé une solution similaire avec "IF/THEN", mais la vôtre est meilleure;), cela fonctionne, mais il y a 2 problèmes, 1. dans De cette façon, je ne peux pas avoir de liens qui ne se terminent pas dans 'jpg',' png' ou 'gif' dans le' content', le 2. est qu'après les photos il y a le type d'image '.jpg' dans plus donc se termine par 'http://example.com/image.jpg.jpg', je n'en ai pas besoin et je ne sais pas comment m'en débarrasser car je vois que vous avez mis 2 $ dans la source et alt, je les ai supprimés, que disparaît mais l'image ne s'affiche pas oO – Adam

0
$content = preg_replace('#\b(http://\S+\.jpg)\b#i', '<img src="$1" alt="$1" />', $content); 
+0

'\ correspond b' avant/après des périodes et d'autres symboles: il correspondrait' http: // something.com/image.jpg.html' et similaires. Et n'avez-vous pas besoin d'échapper à ces barres obliques inverses? – Amarghosh

+0

même problème avec la version d'Amargohosh. – Adam

0

Vous n'avez pas besoin lookaround. Juste aller avec

$content = preg_replace("#(http://[^ ]+\\.jpg(?= |$)#i","<img src=\"$1\" alt=\"$1\"/>", $content);  
+0

Si le remplacement de l'image est avant le remplacement du lien, puis le montre très mal, si c'est après le remplacement de lien alors c'est juste un lien, que dois-je faire? – Adam

+0

c'est ce que je reçois si le remplacement de l'image est avant le remplacement du lien: 'http://192.168.2.104/images/users/image.jpg" alt = "" rel = "nofollow" target = "blank" title = " http://192.168.2.104/images/users/image.jpg ">" class = "news-link"> http://192.168.2.104/images/users/image.jpg ">' – Adam

0

Je pense que vous avez utilisé l'opérateur lookahead lorsque vous vouliez lookbehind. Vous pouvez changer (?=\.jpg) à (?<=\.jpg) mais il y a d'autres regex plus propres, je suis sûr que d'autres publieront.

+0

mais je veux trouver .jpg après le lien – Adam

0

Cela a fonctionné pour moi.

$parse_img='Hello, http://orbitco-ccna-pastquestions.com/images/Q5.jpg 

Dans la figure ci-dessus, le routeur R1 a deux points-à-point. ';

$parse_img=preg_replace('/(https?:\/\/(.\*)?\\.jpg|png|gif)[\s+]*/i',"< img src=\"$1\" alt = \"$1\"></img>",$parse_img); 

echo $parse_img; 

Suyash

Questions connexes