¿Cómo eliminar los caracteres de control de la cadena?

3 minutos de lectura

avatar de usuario
usuario606521

Tengo un formulario en mi página donde el usuario puede escribir un texto y enviarlo. Luego, el texto se envía al servidor (API REST sobre node.js) y se guarda en la base de datos (postgres).

El problema es que algunos caracteres extraños (caracteres de control) se guardan en la base de datos ocasionalmente, por ejemplo, el carácter de control de escape (^[) or backspace control character (^H). Generally it does not break anything since those characters are invisible, so html is rendered correctly. However when I provide xml content for RSS readers, they (readers) return “Malformed XML” because of those control characters (it works after deleting them).

My question is how I can remove those characters from a string on client level (javascript) or server level (javascript/node.js)?

  • by… just doing that? Take the string, use the string replace function to replace any illegal character (or character range) with ”, and then save that instead.

    – Mike ‘Pomax’ Kamermans

    Nov 4, 2014 at 17:39


  • Check this topic stackoverflow.com/questions/4374822/…

    – Asik

    Nov 4, 2014 at 17:40

  • use CDATA to wrap such data

    – Vasiliy Vanchuk

    Nov 4, 2014 at 17:42

  • I don’t think this covers all possible characters that would break things. For example 0x200B is a silent killer – see here stackoverflow.com/questions/12719859/…

    – mike nelson

    Dec 20, 2016 at 19:53

  • Here is a list of all space characters that could be replaced by a normal space cs.tut.fi/~jkorpela/chars/spaces.html and also notes the two invisible space chars that should be removed

    – mike nelson

    Dec 20, 2016 at 19:55

Control characters in Unicode are at codepoints U+0000 through U+001F and U+007F through U+009F. Use a RegExp to find those control characters and replace them with an empty string:

str.replace(/[\u0000-\u001F\u007F-\u009F]/g, "")

Si desea eliminar caracteres adicionales, agréguelos a la clase de personaje dentro de RegExp. Por ejemplo, para eliminar U+200B ZERO WIDTH SPACE también, agregue \u200B antes de ].

  • ¿Esto elimina \u200e?

    – Nathan B.

    25 de agosto de 2020 a las 13:57

  • @NadavB No, este código no elimina la MARCA DE IZQUIERDA A DERECHA U+200E, ya que no es un carácter de control. Actualicé la respuesta para explicar cómo eliminar caracteres adicionales.

    – Rory O’Kane

    28 de enero de 2021 a las 2:31

  • esto es una ‘cura’ alias ‘medicina’ – ¿qué tal “prevención”?

    –Bekim Bacaj

    28 de enero de 2021 a las 2:44


  • @BekimBacaj Dígale esto a las personas que copian y pegan textos de Microsoft Word, por ejemplo 🙂

    – iwanuschka

    1 de julio de 2021 a las 13:37

Tuve un problema similar, aquí está la solución que elijo.

Codifiqué los datos de la cadena del usuario usando encodeURIComponent(variable_Name) y luego los guardé mientras los decodificaba usando decodeURIComponent(variable_Name)

  • Esto no funciona porque encodeURI.. solo codifica caracteres de control y decodeURI.. los decodifica de nuevo

    – usuario606521

    5 de noviembre de 2014 a las 9:40

  • Gracias por su comentario y ¿puede explicar por qué no funcionaría la codificación y decodificación?

    – Mateen

    6 de noviembre de 2014 a las 19:34

  • Porque simplemente CODIFICA caracteres invisibles y luego los DECODIFICA de nuevo, así que, de hecho, nada cambia. Tendré esos caracteres invisibles en mi contenido, y quiero ELIMINARLOS del contenido…

    – usuario606521

    7 de noviembre de 2014 a las 9:32

  • ningún amigo, de hecho, el método encodeuricomponent codifica casi todos los símbolos en su código html equivalente como, por ejemplo, var uri = “@#$%^&*()_+-={}[]\|:;’<>?,./”; var res = encodeURIComponent(uri); salidas: %40%23%24%25%5E%26*()_%2B-%3D%7B%7D%5B %5D%7C%3A%3B’%3C%3E%3F%2C.%2F por lo que los símbolos especiales una vez codificados no dan ningún problema y podemos ver el valor real después de decodificarlo.

    – Mateen

    7 noviembre 2014 a las 17:35


  • Pero quiero eliminar esos caracteres, no codificarlos (no quiero caracteres de “escape” o “retroceso” en, por ejemplo, la descripción de la publicación del blog). Y no puedo enviar contenido codificado a la fuente RSS porque tengo algo de html allí y encodeURIComponent lo codifica y veo etiquetas html en la fuente RSS.

    – usuario606521

    9 de noviembre de 2014 a las 9:56

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad