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!
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"
).
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 );
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.
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 " "
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);
celui-ci fonctionne aussi, j'ai trouvé quelque part
$str = trim($str, chr(0xC2).chr(0xA0));
Cela a fonctionné pour moi:
$str = preg_replace( "~\x{00a0}~siu", " ", $str );