Estoy usando la siguiente expresión regular para eliminar los caracteres de control que no son de impresión de la entrada del usuario antes de insertar los valores en la base de datos.preg_replace para eliminar los caracteres no imprimibles parece eliminar todos los caracteres extraños
preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $value)
¿Hay algún problema con el uso de esto en las cadenas utf-8? Parece eliminar por completo todos los caracteres no ascii.
¿Dejará caracteres válidos fuera del rango ASCII, como los caracteres diacétricos polacos (como ąęćśńżź)? Estoy buscando una expresión regular que elimine las secuencias UTF-8 no válidas (por lo que MySQL no se quejará al insertar dicha cadena en la base de datos), pero deje todo lo demás intacto. – pako
Creo que para eso querrías usar ''/ \ P {Any}/u'' -' Any' debería ser autoexplicativo, y '\ P {}' (mayúscula) es la forma negada de '\ p {} '. Pero estaría más preocupado por cómo esas secuencias de bytes inválidas entraron allí en primer lugar. –