2010-12-16 391 views
27

Je veux faire en sorte que toute occurance d'une image est enveloppé avec un lien vers la source d'imageécriture expression régulière en PHP pour envelopper <img> avec <a>

Comment puis-je écrire un modèle, en PHP pour que je peut trouver ces variations, qui parsèment le texte provenant de la base de données:

<img src='/dir/dir2/image1.jpg' alt='blah blah blah'> 
<img src="/dir/dir2/image2.jpg" alt="blah blah blah" /> 
<img src="/dir/dir2/image3.jpg" /> 

Dans tous les cas, je veux qu'ils apparaissent dans un lien.

+1

Vous transformez '' dans ' '? –

+7

Obligatoire: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 :) (Dans votre cas, c'est probablement gérable, mais Cthulu s'applique toujours .) – deceze

+0

@SHiNKiROU: Oui, il l'est. – Jonah

Répondre

22

preg_replace("{<img\\s*(.*?)src=('.*?'|\".*?\"|[^\\s]+)(.*?)\\s*/?>}ims", '<a href=$2><img $1src=$2 $3/></a>', $str)

gère tous les cas non pratiques

alt text

+0

Merci SHiNKiROU vous êtes mon héros – gio

+2

Aghghghghhhh !!! Analyse syntaxique basée sur Regex! – Jonah

5

Puis-je vous recommandons d'utiliser jQuery et utiliser cet extrait à la place, il devrait être plus facile (et nous aimons tous jQuery à la force brute aucun problème ;])

$('img').wrap(function(){ return '<a href="' + this.src + '"></a>'; }); 

ou est-ce

$('img').wrap(function(){ return '<a href="' + $(this).attr('src') + '"></a>'; }); 

Quoi qu'il en soit, des moments de plaisir à avoir, en utilisant jQuery pour manipuler le clientside DOM;)

+2

Je suis upvoting les deux autres pour réellement utiliser PHP pour résoudre le problème, mais sérieusement, l'emballage DOM élément comme ceci est assez facile dans jQuery, nécessite peu d'effort de votre part, et vous permet de mieux concentrer les zones à être " altéré "si vous décidez soudainement que ... par exemple, les images d'en-tête ... n'ont pas besoin d'être sélectionnées. Je ne dis pas que le mien est nécessairement la voie à suivre, mais je signale simplement qu'il y a des avantages à cette solution délicate. – jcolebrand

+0

Connexe: * [jQuery] (http://meta.stackexchange.com/questions/19478/the-many-memes-of-meta/19492#19492) * –