problème avec str_replace

Répondre
JuTs
le 11/05/2006 à 12:04
JuTs
Bonjour

J'ai le code suivant :

<?php
$char_disp = array('&#265;', '&#265;', '&#264;', '&#264;}',
'&#285;', '&#285;', '&#284;', '&#284;',
'&#293;', '&#293;', '&#292;', '&#292;',
'&#309;', '&#309;', '&#308;', '&#308;',
'&#349;', '&#349;', '&#348;', '&#348;',
'&#365;', '&#365;', '&#364;', '&#364;');
}

$char_src = array('cx', '{cx}', 'Cx', '{Cx}',
'gx', '{gx}', 'Gx', '{Gx}',
'hx', '{hx}', 'Hx', '{Hx}',
'jx', '{jx}', 'Jx', '{Jx}',
'sx', '{sx}', 'Sx', '{Sx}',
'ux', '{ux}', 'Ux', '{Ux}');

$myContentVar = str_replace($char_src, $char_disp, $myContentVar);
?>


$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.
JuTs
zebden
le 11/05/2006 à 16:07
zebden
T'as essayé d'echapper les accolades ?
zebdinou pour les intimes / Blog : http://www.zebden.fr
JuTs
le 12/05/2006 à 15:27
JuTs
Par contre si j'ajoute :

<?php
$myContentVar = str_replace("{", "", $myContentVar);
$myContentVar = str_replace("}", "", $myContentVar);
?>


à 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.
JuTs
zebden
le 12/05/2006 à 16:31
zebden
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

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


Logiquement ca devrait enlever que les bonnes accolades.
zebdinou pour les intimes / Blog : http://www.zebden.fr
JuTs
le 12/05/2006 à 20:35
JuTs
Quel c.. je fait smiley

Même pas besoin, il suffit de chercher les chaînes qui ont des accolades en premier.
JuTs
zebden
le 13/05/2006 à 15:56
zebden
Oui pas faux .. Dommage, je me suis fais chier pour rien ^^ Elle était quand même belle ma formule !
zebdinou pour les intimes / Blog : http://www.zebden.fr
LupusMic
le 13/05/2006 à 18:03
LupusMic
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 :

echo "locale : {$var}\nencapsulée : {$this->var}" ;
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Bzh
le 13/05/2006 à 18:43
Bzh
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
le 14/05/2006 à 17:19
LupusMic
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 ;).
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre
LoadingChargement en cours