Me gustaría eliminar todos los caracteres UTF-8 no válidos de una cadena en JavaScript. He intentado con este JavaScript:Cómo eliminar caracteres inválidos UTF-8 de una cadena de JavaScript?
strTest = strTest.replace(/([\x00-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3})|./g, "$1");
Parece que la validación de expresiones regulares UTF-8 describe aquí (enlace eliminado) es más completa y adaptada de la misma manera como:
strTest = strTest.replace(/([\x09\x0A\x0D\x20-\x7E]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})|./g, "$1");
Ambas piezas de código parecen estar permitiendo UTF-8 a través válida, pero no están filtrando casi ninguno de los malos UTF-8 caracteres de mi datos de prueba: UTF-8 decoder capability and stress test. O bien los caracteres incorrectos aparecen sin cambios o parecen tener algunos de sus bytes eliminados creando un nuevo carácter no válido.
No estoy muy familiarizado con el estándar UTF-8 o con multibyte en JavaScript, así que no estoy seguro de si estoy fallando en representar el UTF-8 correcto en la expresión regular o si estoy aplicando esa expresión regular incorrectamente en JavaScript
Editar: agregada la bandera global a mi expresión regular por comentario de Tomalak, sin embargo, esto todavía no funciona para mí. Estoy abandonando esto en el lado del cliente por cada comentario de Bobince.
eslabones perdidos: enlace 1 - http: // stackoverflow.com/questions/1401317/remove-non-uft8-characters-from-string link 2 - http://www.w3.org/International/questions/qa-forms-utf-8 –