Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/04/2011, 10h05   #1
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
Par défaut Modifier src="" des images

Bonjour,

J'ai une regex qui me pause des soucis, en effet, comme l'indique le titre, je dois modifier le contenu de la balise src d'une image. l'objectif est de rajouter un . (point) devant l'url de la photo

Je travail en PHP 5.

Voilà ce que j'ai tenté :
Code :
1
2
3
4
 
	$i ='"';
	$contenu = stripslashes($tab_periple['contenu']);
	$contenu2 = preg_replace('#src=(.*\.jpg)"#','src='.$i.'.$1'.$i.'',$contenu);
"

C'est fonctionnel seulement cela ne marche pas si c'est des images gif ou png. Aussi le second problème est que parfois la balise <img se ferme soit comme ça : " />" où comme ça " >".

Pouvez-vous m'aider à finaliser cette regex ?

Par avance un grand merci!


Edit : technique du flemmard :

Code :
$contenu = str_replace('src="/', 'src="./', $contenu);
Heretik
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 12h09   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Heu, c'est loin d'être une technique de flemmard et c'est la technique que je te recommande. str_replace est au moins 10x plus rapide qu'une regexp. D'une manière générale, partout où tu peux remplacer une regexp par un strpos, un substr ou un str_replace, fais-le, le gain de perf est énorme.

Enfin, si tu tiens à te faire mousser auprès des filles ou à devenir un gourou dans ta boite, tu peux mettre des regexp partout, ça en jette un max

-- Edit

La bonne manière serait d'utiliser DOMDocument pour trouver tes nodes et les modifier avec DOMElement::getAttribute et DOMElement::setAttribute (aaaah Stealh35, sors de me tête )
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 12h14   #3
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
oui les regex sont à utiliser avec parcimonie...

Sinon pour les extensions des fichiers, tu peux en choisir dans une liste (ou booléen) :

Code php :
1
2
 
$contenu2 = preg_replace('#src=(.*\.(jpg|gif|png))"#','src='.$i.'.$1'.$i.'',$contenu);
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 13h48   #4
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
Merci beaucoup pour ces éléments de réponse.

par-contre DOM, je me le réserve pour dans un petit moment lors de mon apprentissage d'ajax :-)

J'ai un autre souci qui je pense doit être réglée avec une regexp, je vais ouvrir un nouveau post et clôturer celui-ci.
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 14h01   #5
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Citation:
par-contre DOM, je me le réserve pour dans un petit moment lors de mon apprentissage d'ajax :-)
Ajax s'attache plus à la manipulation du XHR (ou de l'activeX correspondant pour Internet Explorer) qu'a la manipulation du DOM (ce qui est la grande spécialité de jQuery et Sizzle).
Enfin, on retrouve les mêmes principes, y compris les XPath et XSL(T) qui sont d'une grande puissance dans PHP.
Je te conseille vivement de te former sur XML un de ces quatre matins, ça change complètement la façon de concevoir les applis web selon moi.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 14h07   #6
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
Citation:
Envoyé par Benjamin Delespierre Voir le message
Ajax s'attache plus à la manipulation du XHR (ou de l'activeX correspondant pour Internet Explorer) qu'a la manipulation du DOM (ce qui est la grande spécialité de jQuery et Sizzle).
Enfin, on retrouve les mêmes principes, y compris les XPath et XSL(T) qui sont d'une grande puissance dans PHP.
Je te conseille vivement de te former sur XML un de ces quatre matins, ça change complètement la façon de concevoir les applis web selon moi.
Je vais donc me renseigner sur ces points là, merci pour le retour sur expérience.
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 14h27   #7
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Pour plus d'infos:
- Manipuler XML en PHP
- DOMDocument
- DOMXPath
- XSLProcessor
- SimpleXMLIterator (pour itérer à travers un document)

Pour apprendre:
- XML
- XPath
- XSLT

Il vaut mieux lire ces tutos dans l'ordre indiqué car on a besoin d'une bonne connaissance de la syntaxe des XPath pour fabriquer des XSLT.

En ce qui concerne le XHR, il n'y en a pas en PHP (à ma connaissance) pour deux raisons:
- PHP est totalement synchrone (bien qu'il soit possible par des moyens complexes de le faire tourner en asynchrone)
- DOMDocument peut charger des documents distants
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h31.


 
 
 
 
Partenaires

Hébergement Web