IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Changer URL à la volé avec preg_replace


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Changer URL à la volé avec preg_replace
    Bonjour,
    Après avoir chercher et tester plusieurs expressions régulières je me permet de m'en remettre à vous.
    Je cherche à faire un script qui modifie à la volé tous les liens.
    Mon expression fonctionne lorsqu'il s'agit de texte dans le lien mais cela bug quand il s'agit d'une image.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function format_texte_externe($chaine_caractere)
    {	
     
    	//remplacement des liens
    	$chaine_caractere=preg_replace('`(\<a\s+href="(.*?)"([^>]*>)(.*?)</a>)`i', '<a href="$2" target="_blank" rel="nofollow" title="$4" class="lien_extrait_rss">$4</a>', $chaine_caractere);
     
    	return $chaine_caractere;
    }
     
    $test = 'BLA BLA BLA <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?id=291608629&amp;s=143442&amp;v0=9990"><img src="http://a1.phobos.apple.com/us/r1000/030/Music/46/68/01/mzi.ceykligy.100x100-75.jpg" border="0"></a> BLA BLA BLA';
    echo format_texte_externe($test);
    Je suppose que c'est à cause des double quotes que l'on trouve dans le code de l'image mais je n'arrive pas à la gérer dans l'expression régulière.

    Merci d'avance pour votre aide

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Je comprends pas trop le but, mais s'il s'agit juste de gérer les double guillemets dans la capture 4, ceci devrait le faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
     
    $test = 'BLA BLA BLA <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?id=291608629&amp;s=143442&amp;v0=9990"><img src="http://a1.phobos.apple.com/us/r1000/030/Music/46/68/01/mzi.ceykligy.100x100-75.jpg" border="0"></a> BLA BLA BLA';
    $myPattern = '#(\<a\s+href="(.*?)"([^>]*>)(.*?)</a>)#i';
    preg_match($myPattern, $test, $match);
    $myTarget = str_replace('"', '\'', $match[4]);
    $myReplace = sprintf('<a href="$2" target="_blank" rel="nofollow" title="%s" class="lien_extrait_rss">$4</a>', $myTarget);
    print preg_replace($myPattern, $myReplace, $test);
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par jml94 Voir le message
    Je comprends pas trop le but
    Tu as raison c'est toujours mieux quand on comprend le pourquoi du comment.
    Je realise un site dans lequel je recupère des flux RSS, comme je n'ai pas la main sur le contenu des flux RSS.

    Je voulais utiliser cette fonction afin de ne pas avoir des liens sur le site avec un target="_self" qui changerai ma propre page, d'ou l'idée de changer les liens à la volé.
    ET au passage les formate avec un rel="nofollow" et un title pour faire plus propre.

    Ta solution fonctionne a peu pres sauf que tous les liens ont le meme title.
    Cela dit ça m'a ouvert une piste, à savoir d'utiliser "option e" afin de gérer les double guillemet dans la capture, seulement je sais pas comment on fait pour mettre des options a la suite puisque j'ai déjà option i

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    preg_replace("/(<\/?)(\w+)([^>]*>)/e", 
                 "'\\1'.strtoupper('\\2').'\\3'", 
                 $html_body);

Discussions similaires

  1. [REQUETE ORACLE] Vols avec ou sans escales
    Par e-lifestyle dans le forum Oracle
    Réponses: 7
    Dernier message: 06/01/2006, 22h46
  2. Réponses: 6
    Dernier message: 19/12/2005, 15h06
  3. [RegEx] Remplacer une chaîne avec preg_replace
    Par GregPeck dans le forum Langage
    Réponses: 3
    Dernier message: 08/12/2005, 12h21
  4. [RegEx] problème avec preg_replace
    Par carlos20 dans le forum Langage
    Réponses: 6
    Dernier message: 27/10/2005, 10h29
  5. Comment je peux changer nom de 'Table' avec la phrase sql
    Par YEK dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/10/2004, 08h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo