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);
Un punto secundario: / u00a0 es en realidad un carácter de espacio sin interrupciones, consulte http://www.fileformat.info/info/unicode/char/a0/index.htm
Entonces podría ser más correcto reemplazarlo con ""