problème avec str_replace

Répondre
JuTs
JuTs
Déconnecté
JuTs
Bonjour

J'ai le code suivant :

  1.  
  2. <?php
  3. $char_disp = array('&#265;', '&#265;', '&#264;', '&#264;}', 
  4.             '&#285;', '&#285;', '&#284;', '&#284;', 
  5.             '&#293;', '&#293;', '&#292;', '&#292;', 
  6.             '&#309;', '&#309;', '&#308;', '&#308;', 
  7.             '&#349;', '&#349;', '&#348;', '&#348;', 
  8.             '&#365;', '&#365;', '&#364;', '&#364;');  
  9. }  
  10.  
  11. $char_src = array('cx', '{cx}', 'Cx', '{Cx}', 
  12.       'gx', '{gx}', 'Gx', '{Gx}', 
  13.       'hx', '{hx}', 'Hx', '{Hx}', 
  14.       'jx', '{jx}', 'Jx', '{Jx}', 
  15.       'sx', '{sx}', 'Sx', '{Sx}', 
  16.       'ux', '{ux}', 'Ux', '{Ux}');  
  17.  
  18. $myContentVar = str_replace($char_src, $char_disp, $myContentVar);  
  19. ?>
  20.  


$myContentVar contient un texte pris dans une base de données

Il me permet de remplacer les chaînes contenue dans $char_src par celles contenues dans $char_disp.
Pour les cas Cx, cx, Gx, gx, ... cela fonctionne très bien mais pour les {cx}, {Cx}, ... les caractères entre { } sont bien replacé mais les {} sont toujours là alors qu'elles devraient être supprimées

Je ne comprends pas pourquoi.
zebden
zebden
Déconnecté
zebdinou pour les intimes / Blog : http://www.zebden.fr
T'as essayé d'echapper les accolades ?
JuTs
JuTs
Déconnecté
JuTs
c'est pas ça
JuTs
JuTs
Déconnecté
JuTs
Par contre si j'ajoute :

  1.  
  2. <?php
  3. $myContentVar = str_replace("{", "", $myContentVar);  
  4. $myContentVar = str_replace("}", "", $myContentVar);  
  5. ?>
  6.  


à la fin c'est ok.

Mais je suis dans la m... si j'ai de accolades que je ne dois pas remplacer dans mon texte.
zebden
zebden
Déconnecté
zebdinou pour les intimes / Blog : http://www.zebden.fr
Oui en fait, c'est tout con.. pourquoi il remplace pas les accolades ? Parce qu'il remplace la chaine à l'intérieur et donc ca ne correspond plus au masque initial {&#xxx;}

Alors remplace toutes tes chaines sans accolades et ensuite tu peux ajouter ceci

  1. <?php
  2. $myContentVar = preg_replace('`(\{{1})(&#[0-9]{1,3};)(\}{1})`i', "\\2", $myContentVar);  
  3. ?> 


Logiquement ca devrait enlever que les bonnes accolades.
JuTs
JuTs
Déconnecté
JuTs
Quel c.. je fait smiley

Même pas besoin, il suffit de chercher les chaînes qui ont des accolades en premier.
zebden
zebden
Déconnecté
zebdinou pour les intimes / Blog : http://www.zebden.fr
Oui pas faux .. Dommage, je me suis fais chier pour rien ^^ Elle était quand même belle ma formule !
LupusMic
LupusMic
Déconnecté
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Je voudrais juste rappeler que, dans une chaîne délimitée par des double-quotes (poules :-D), les accolades permettent de trouver une variable :

  1. echo "locale : {$var}\nencapsulée : {$this->var}" ; 
Bzh
Bzh
Déconnecté
D'où l'interet d'utiliser au maximum les simples quotes qui sont d'ailleur beaucoup plus rapide puisque PHP ne recherche pas des variables à l'intérieur...
LupusMic
LupusMic
Déconnecté
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Tout à fait d'accord, mais des carctères comme \n ne sont plus repérés, ce méfier et connaître le fonctionnement d'une chaîne sur le bout des doigts ;).
Bzh
Bzh
Déconnecté
Arf !

Ouaip, ch'ui d'accord smiley ...
Répondre
Accès rapide :

Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Php - Breizh Blog