J'ai une chaîne de caractères avec "u00a0", et j'ai besoin de la remplacer par ""

j'ai besoin de nettoyer une chaîne qui vient (copier/coller) de diverses applications Microsoft Office suite ( Excel,Accès et Mot), chacune avec son propre ensemble d'encodage.

j'utilise json_encode pour déboguer 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 chance.

$string = 'mail@mail.comu00a0 u00a0 u00a0 u00a0 u00a0 u00a0 u00a0 u00a0 u00a0 u00a0 u00a0;mail@mail.com'; //this is the output from json_encode

$clean = str_replace("u00a0", "",$string);

renvoie:

mail@mail.comu00a0 u00a0 u00a0 u00a0 u00a0 u00a0 u00a0 u00a0 u00a0 u00a0 u00a0;mail@mail.com

C'est exactement la même; elle ignore complètement u00a0.

Est-il un moyen de contourner cela? En outre, je sens que je suis en train de réinventer la roue, y a-t-il une fonction/classe qui supprime complètement tous les caractères possibles de chaque encodage possible?

____EDIT____

après les deux premières réponses, je dois clarifier que mon exemple fonctionne, parce que c'est la sortie de json_encode, et non pas la sortie réelle. chaîne!

13
demandé sur Peter Mortensen 2010-04-07 16:49:09

7 réponses

fonctionne pour moi, quand je copie/colle votre code. Essayez de remplacer les guillemets dans votre str_replace() avec des guillemets simples, ou de s'échapper de la barre oblique inverse ("\u00a0").

6
répondu Annika Backstrom 2010-04-07 12:55:04

En combinant ord()substr() sur ma chaîne contenant \u00a0, j'ai trouvé la suite de la malédiction:

$text = str_replace( chr( 194 ) . chr( 160 ), ' ', $text );
37
répondu Arne 2013-07-10 08:42:12

je viens d'avoir le même problème. Apparemment le json_encode de PHP retournera null pour n'importe quelle chaîne avec un 'espace de non-rupture' dedans.

La Solution est de le remplacer par un espace normal:

str_replace(chr(160),' ');

j'espère que cela aide quelqu'un - cela m'a pris une heure à déterminer.

4
répondu Jeremy Jacob 2014-10-01 03:16:46

un point mineur: \u00a0 est en fait un caractère d'espace sans rupture, C. F. http://www.fileformat.info/info/unicode/char/a0/index.htm

il serait donc plus correct de le remplacer par " "

2
répondu Daniel Winterstein 2012-11-12 20:31:24

Vous avez à faire avec des guillemets simples comme ceci:

str_replace('\u00a0', "",$string);

Ou, si vous voulez utiliser les guillemets, vous avez pour échapper à la barre oblique inverse - qui devrait ressembler à ceci:

str_replace("\u00a0", "",$string);
1
répondu oezi 2014-10-01 03:16:04

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

$str = trim($str, chr(0xC2).chr(0xA0));
1
répondu www.amitpatil.me 2014-12-18 11:59:51

Cela a fonctionné pour moi:

$str = preg_replace( "~\x{00a0}~siu", " ", $str );
0
répondu patrick 2016-04-26 22:24:18