Je dois nettoyer une chaîne qui vient (copier/coller) de différentes applications de la suite Microsoft Office ( Excel , Access et Word ), chacune avec son propre jeu de codage.
J'utilise json_encode à des fins de débogage afin de pouvoir voir chaque caractère encodé.
Je suis capable de nettoyer tout ce que j'ai trouvé jusqu'à présent (\ r\n) avec str_replace, mais avec\u00a0, je n'ai pas de chance.
$string = '[email protected]\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;[email protected]'; //this is the output from json_encode
$clean = str_replace("\u00a0", "",$string);
résultats:
[email protected]\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;[email protected]
C'est exactement pareil. il ignore complètement\u00a0.
Y a-t-il un moyen de contourner ceci? De plus, j'ai le sentiment de réinventer la roue. Existe-t-il une fonction/classe qui supprime complètement CHAQUE caractère possible de tous les codages possibles?
____MODIFIER____
Après les deux premières réponses, je dois préciser que mon exemple fonctionne, car il s'agit de la sortie de json_encode, pas de la chaîne réelle!
Fonctionne pour moi lorsque je copie/colle votre code. Essayez de remplacer les guillemets doubles dans votre str_replace()
par des guillemets simples ou d'échapper à la barre oblique inverse ("\\u00a0"
).
En combinant ord()
avec substr()
sur ma chaîne contenant\u00a0, la malédiction suivante a fonctionné:
$text = str_replace( chr( 194 ) . chr( 160 ), ' ', $text );
Je viens d'avoir le même problème. Apparemment, le code json_encode de PHP retournera la valeur null pour toute chaîne contenant un "espace insécable".
La solution est de remplacer ceci par un espace normal:
str_replace(chr(160),' ');
J'espère que cela aide quelqu'un - il m'a fallu une heure pour comprendre.
Un point mineur:\u00a0 est en fait un espace insécable, c.f. http://www.fileformat.info/info/unicode/char/a0/index.htm
Donc, il serait peut-être plus correct de le remplacer par ""
Vous devez faire cela avec des guillemets simples comme ceci:
str_replace('\u00a0', "",$string);
Ou, si vous aimez utiliser des guillemets doubles, vous devez échapper à la barre oblique inverse - qui ressemblerait à ceci:
str_replace("\\u00a0", "",$string);
Celui-ci fonctionne aussi, j'ai trouvé quelque part
$str = trim($str, chr(0xC2).chr(0xA0));
Cela a fait le tour pour moi:
$str = preg_replace( "~\x{00a0}~siu", " ", $str );