web-dev-qa-db-fra.com

J'ai une chaîne avec "\ u00a0" et je dois la remplacer par "" str_replace échoue

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!

17
0plus1

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").

5
Annika Backstrom

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 );
45
Arne

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.

4
Jeremy Jacob

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 ""

2
Daniel Winterstein

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);
1
oezi

Celui-ci fonctionne aussi, j'ai trouvé quelque part

$str = trim($str, chr(0xC2).chr(0xA0));
1
www.amitpatil.me

Cela a fait le tour pour moi: 

$str = preg_replace( "~\x{00a0}~siu", " ", $str );
0
patrick