Una expresión regular no tiene en cuenta UTF-8 caracteres por defecto. El meta-personaje \s
solo cuenta para el conjunto latino original. Por lo tanto, el siguiente comando sólo elimina las pestañas, espacios, retornos de carro y nuevas líneas
// http://stackoverflow.com/a/1279798/54964
$str=preg_replace('/\s+/', '', $str);
Con UTF-8 convirtiéndose en la corriente principal de esta expresión será más frecuencia fallar/alto cuando se llega a los nuevos caracteres UTF-8, dejando espacios en blanco detrás de eso, el \s
no puede explicar.
Para tratar con los nuevos tipos de espacios en blanco presentados en unicode/utf-8, se necesita una cadena más extensa para unir y eliminar el espacio en blanco moderno.
Dado que las expresiones regulares de forma predeterminada no reconocen caracteres multibyte, solo se puede utilizar una meta cadena delimitada para identificarlos, para evitar que los segmentos de bytes se alteren en otros caracteres utf-8 (\x80
en el conjunto quad podría reemplazar todos \x80
sub-bytes en citas inteligentes)
$cleanedstr = preg_replace(
"/(\t|\n|\v|\f|\r| |\xC2\x85|\xc2\xa0|\xe1\xa0\x8e|\xe2\x80[\x80-\x8D]|\xe2\x80\xa8|\xe2\x80\xa9|\xe2\x80\xaF|\xe2\x81\x9f|\xe2\x81\xa0|\xe3\x80\x80|\xef\xbb\xbf)+/",
"_",
$str
);
Esto explica y elimina pestañas, saltos de línea, pestañas verticales, formfeeds, retornos de carro, espacios y adicionalmente de here:
nextLine, no espacios de separación, separador de vocales mongol, [en quad, em quad, en space, em space, espacio de tres por em, espacio de cuatro por em, espacio de six-per-em, espacio de figura, espacio de puntuación, espacio delgado , espacio de pelo, espacio de ancho cero, no-carpintero de ancho cero, carpintero de ancho cero], separador de líneas, separador de párrafos, espacio estrecho sin interrupciones, espacio matemático medio, carpintero de palabras, espacio ideográfico y espacio sin ruptura de ancho cero.
Muchos de éstos causan estragos en archivos XML cuando se exportan desde herramientas o sitios que ensucian las búsquedas de texto, reconocimiento automatizados, y se puede pegar de forma invisible en el código fuente PHP que hace que el analizador para salto al siguiente orden (separadores de párrafos y líneas) que hace que las líneas de código salten dando como resultado errores intermitentes e inexplicables que hemos comenzado a llamar "enfermedades de transmisión textual"
[Ya no es seguro copiar y pegar desde la web. Use un escáner de caracteres para proteger su código.lol]
posible duplicado de [No se puede obtener str \ _replace() para quitar espacios en una cadena PHP] (http://stackoverflow.com/questions/16563421/cant-get-str-replace-to-strip- out-spaces-in-a-php-string) –
@taztodgmail Mira las fechas. Esto es 2009 y el otro es 2013. El 2013 es un duplicado de esto. –
FYI: el indicador \ s no incluye caracteres utf-8 como nbsp; codificado en utf-8 ;, ps, quads y fs http://stackoverflow.com/questions/2227921/simplest-way-to-get-a- complete-list-of-all-the-utf-8-whitespace-characters-in-ph – ppostma1