Una expresión regular no tiene en cuenta los caracteres UTF-8 de forma predeterminada. El \s
metacarácter solo representa el conjunto latino original. Por lo tanto, el siguiente comando solo elimina tabulaciones, espacios, retornos de carro y nuevas líneas
$str=preg_replace('/\s+/', '', $str);
Con UTF-8 convirtiéndose en la corriente principal, esta expresión fallará o se detendrá con más frecuencia cuando alcance los nuevos caracteres utf-8, dejando espacios en blanco que \s
no se pueden explicar.
Para hacer frente a los nuevos tipos de espacios en blanco introducidos en unicode / utf-8, se requiere una cadena más extensa para hacer coincidir y eliminar los espacios en blanco modernos.
Debido a que las expresiones regulares por defecto no reconocen caracteres multibyte, solo se puede usar una metacadena delimitada para identificarlos, para evitar que los segmentos de bytes sean alterados en otros caracteres utf-8 ( \x80
en el conjunto cuádruple podría reemplazar todos \x80
los subbytes entre comillas tipográficas)
$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 tiene en cuenta y elimina pestañas, nuevas líneas, pestañas verticales, avances de formulario, retornos de carro, espacios y, además, de aquí :
siguiente línea, espacios sin interrupción, separador de vocales de mongolia, [en quad, em quad, en espacio, espacio em, espacio tres por em, espacio cuatro por em, espacio seis por em, espacio para figuras, espacio de puntuación , espacio delgado, espacio de pelo, espacio de ancho cero, no ensamblador de ancho cero, ensamblador de ancho cero], separador de línea, separador de párrafo, espacio estrecho sin interrupciones, espacio matemático medio, ensamblador de palabras, espacio ideográfico y el ancho cero no romper el espacio.
Muchos de estos causan estragos en los archivos xml cuando se exportan desde herramientas automatizadas o sitios que estropean las búsquedas de texto, el reconocimiento y se pueden pegar de manera invisible en el código fuente PHP, lo que hace que el analizador salte al siguiente comando (separadores de párrafo y línea), lo que genera líneas. del código que se debe omitir, lo que da como resultado errores intermitentes e inexplicables a los que comenzamos a denominar "enfermedades de transmisión textual"
[Ya no es seguro copiar y pegar desde la web. Utilice un escáner de caracteres para proteger su código. lol]