php encoding str-replace

php - Tengo una cadena con "/ u00a0", y necesito reemplazarla con "" str_replace falla



encoding str-replace (7)

Necesito limpiar una cadena que viene (copiada / pegada) de varias aplicaciones de Microsoft Office ( Excel , Access y Word ), cada una con su propio conjunto de codificación.

Estoy usando json_encode para propósitos de depuración para poder ver cada carácter codificado.

Puedo limpiar todo lo que encontré hasta ahora (/ r / n) con str_replace, pero con / u00a0 no tengo suerte.

$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);

devoluciones:

[email protected]/u00a0 /u00a0 /u00a0 /u00a0 /u00a0 /u00a0 /u00a0 /u00a0 /u00a0 /u00a0 /u00a0;[email protected]

Eso es exactamente lo mismo; ignora por completo / u00a0.

¿Hay alguna forma de evitar esto? Además, siento que estoy reinventando la rueda, ¿hay alguna función / clase que elimine completamente TODAS las características posibles de TODAS las codificaciones posibles?

____EDITAR____

Después de las dos primeras respuestas, necesito aclarar que mi ejemplo funciona, porque es el resultado de json_encode, ¡no la cadena real!


Acabo de tener el mismo problema. Al parecer, el json_encode de PHP devolverá un valor nulo para cualquier cadena con un "espacio sin interrupciones" en ella.

La solución es reemplazar esto con un espacio regular:

str_replace(chr(160),'' '');

Espero que esto ayude a alguien, me tomó una hora darme cuenta.


Al combinar ord() con substr() en mi cadena que contiene / u00a0, encontré la siguiente maldición para trabajar:

$text = str_replace( chr( 194 ) . chr( 160 ), '' '', $text );


Este también funciona, lo encontré en alguna parte.

$str = trim($str, chr(0xC2).chr(0xA0));


Esto hizo el truco para mí:

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


Funciona para mí, cuando copio / pego tu código. Intente reemplazar las comillas dobles en su str_replace() con comillas simples, o "//u00a0" la barra invertida ( "//u00a0" ).


Tienes que hacer esto con comillas simples como esta:

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

O, si te gusta usar comillas dobles, debes escapar de la barra invertida, que se vería así:

str_replace("//u00a0", "",$string);