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 :

Remplacer les " par des “ sauf entre balises Html [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Points : 20
    Points
    20
    Par défaut Remplacer les " par des “ sauf entre balises Html
    'jour à tous,

    Cela fait maintenant 2 heures que je planche la dessus avec mon ami Google... je craque. Je cherche à transformer tous les doubles quotes d'une chaine par des “ sauf à l'intérieur des balises Html.
    En clair : échanger tous les " par des &ldquo; sauf à l'intérieur des sous chaines commençant par < et finissant par >.

    Pour l'instant, j'arrive à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $content = '<img src="image.jpg" alt="image" />et des "doubles quotes"';
    $content = preg_replace('`#[^<(.*)>#U]"\""`' ,'&ldquo;',$content);
    ... mais ça ne modifie rien du tout ! Ou est mon erreur ?!

  2. #2
    Membre habitué Avatar de Mitaka
    Profil pro
    formaTRICE en informatique
    Inscrit en
    Avril 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : formaTRICE en informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 192
    Points : 178
    Points
    178
    Par défaut
    salut
    J'ai trouvé une expressions qui correspond tout à fait :
    et j'ai trouvé un super outil : http://gskinner.com/RegExr/

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Points : 20
    Points
    20
    Par défaut Hmmm... presque
    Tout d'abord, merci pour ta rapidité ! Mais ta regex remplace TOUTE la(les) chaines en dehors des balises par &ldquo;, je ne cherche à remplacer QUE les ", sans rien changer au reste de la chaine. Les parenthèses capturantes m'ont l'air assez tordue comme solution à employer dans ce cas...

    Merci pour ton lien, cet outil m'a l'air bien pratique .

  4. #4
    Membre habitué Avatar de Mitaka
    Profil pro
    formaTRICE en informatique
    Inscrit en
    Avril 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : formaTRICE en informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 192
    Points : 178
    Points
    178
    Par défaut
    passe par deux expressions c'est mieux pour la mémoire
    j'ai pas trop le temps de regarder désolée

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Points : 20
    Points
    20
    Par défaut
    Rhaaaa, j'ai pulvérisé mon record de temps passé / nombre de lignes codées ! Finalement, j'y suis arrivé, pour ceux que ça interresse, voila ma fonction (perfectible vis à vis de l'occurence de fin de chaine), qui permet de substituer de moches " et autres ' en beaux guillemets doubles et apostophes sans toucher à ce qui se trouve dans les balises Html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function printOut($content) {
     
        //Add left quotes everywhere exept if patern is followed by '>'
        $content = preg_replace('#"(?![^<]*>)#Ui','&ldquo;',$content);
        //In case the string ends here, replace with a right quote
        $content = preg_replace('#&ldquo;$#','&rdquo;',$content);
        //End of a word, we can replace left quote by a right one :
        $content = str_replace("&ldquo; ","&rdquo; ",$content);
        //Replace single quotes
        $content = str_replace("'","&rsquo;",$content);
     
        echo stripslashes($content);
    }
    Bon, maintenant, faut faire la même chose pour échapper le JS éventuel entre <script> et </script>, si quelqu'un a une bonne idée qui regrouperai tout ça élégamment, je suis preneur

  6. #6
    Membre actif Avatar de k1rby
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 181
    Points : 219
    Points
    219
    Par défaut
    Un peu plus simple que ce que tu as fais :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    function trans($match){
    	return '<'.$match[1].$match[2].'>'.preg_replace('#"#','&ldquo;',$match[3]).'</'.$match[1].'>';
    }
    $html='<span class="test">"hehe"</span>';
    $html=preg_replace_callback('#<(\w+)(\s[\w\s="/]*)>(.*)</\1>#','trans',$html);
    echo $html;
    ?>

    Sinon, je ne comprends pas ce que tu veux dire par "échapper le JS éventuel entre <script> et </script>"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CSV] Remplacer les points par des virgules
    Par johnkro dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2008, 19h25
  2. Comment remplacer les tabulations par des espaces ?
    Par richarno dans le forum Langage
    Réponses: 7
    Dernier message: 25/10/2007, 13h05
  3. remplacer les boutons par des images
    Par sotfage dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 18/06/2007, 17h41
  4. Label d'axe graphique: remplacer les nombres par des mots
    Par Chrysomallus dans le forum MATLAB
    Réponses: 3
    Dernier message: 19/04/2007, 15h23
  5. [vb6] Remplacer les Frames par des PictureBox
    Par Christophe P. dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 10/07/2006, 16h26

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