2012-07-19 25 views
6

Estoy tratando de crear un bookmarklet y me golpeé con este problema que pude descifrar: un personaje \u8203, que Chrome me dice inútilmente en mi bloque de código (al pegarlo en la consola JS) es un `" Carácter inválido ILEGAL ".Cómo quitar de manera confiable los caracteres invisibles que rompen el código?

Afortunadamente, Safari fue quien me dijo que era \u8203.

Estoy editando el código en el editor Sublime Text 2 y, de alguna manera, copiando dentro y fuera (también probé TextEdit) falla al eliminarlo.

¿Hay algún tipo de sitio web en alguna parte que pueda despojar a todos los caracteres que no sean ASCII?

Cuando intento guardar como ISO 8859 pero lo guardo como UTF-8 "debido a caracteres no admitidos".

... Sí. ese es el punto. Deshazte de mis malvados personajes no compatibles.

¿Qué se supone que debo hacer? ¿Editar mi archivo en un editor hexadecimal?

FYI En realidad, lo resolví volviendo a escribir el código (que se originó en este sitio por cierto).

+0

acabo de hacer algunas google y encontrados [esta] (http://www.perlmonks.org/?node_id=619792) y [ esto] (http://stackoverflow.com/questions/1176904/php-how-to-remove-all-non-printable-characters-in-a-string) – Adi

+0

¿Qué tal algo que procesa mi portapapeles. O un sitio web con un conjunto de entradas de texto con las que puedo copiar/pegar. –

+0

No creo que sea posible solo con Javascript (supongo que esto es lo que estás usando, debido a la etiqueta en tu pregunta). Sin embargo, puede escribir un pequeño script de Javascript con un poco de ayuda de Flash (creo que hay herramientas listas para eso) que leerá el portapapeles, luego haga el reemplazo de RegEx y luego vuelva a escribir en el portapapeles. – Adi

Respuesta

4

Bueno, la forma más fácil que se me ocurre es utilizar sed

sed -i 's/[^[:print:]]//g' your_script.js 
//   ^^^^^ this can also be 'ascii' 

o el uso de tr

tr -cd '\11\12\15\40-\176' <old_script.js> new_script.js 
+0

¿igualará eso el personaje (que no está en el rango de 128-255 ascii)? –

+0

@StevenLu, bien, piense en ello como una lista blanca. Quieres mantener SOLO caracteres ASCII, por lo que realmente no te importa '\ u8203'. Explicaré más en la respuesta. – Adi

+0

@StevenLu, aparentemente cometí un error. Coincidí con lo opuesto a lo que quieres. Nota: puede hacer lo mismo con 'RegEx' de cualquier idioma, ¿tiene instalación' php' o 'perl'? – Adi

11

¿Hay algún tipo de página web en alguna parte que se tira de todos los caracteres otros que ASCII?

Usted podría utilizar this website

puede volver a crear el sitio web utilizando este código:

<!DOCTYPE html> 
<html> 

    <head> 
     <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
     <title>- jsFiddle demo</title> 
     <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
     <link rel="stylesheet" type="text/css" href="/css/normalize.css"> 
     <link rel="stylesheet" type="text/css" href="/css/result-light.css"> 
     <style type="text/css"> 
      textarea { 
       width: 800px; 
       height: 480px; 
       outline: none; 
       font-family: Monaco, Consolas, monospace; 
       border: 0; 
       padding: 15px; 
       color: hsl(0, 0%, 27%); 
       background-color: #F6F6F6; 
      } 
     </style> 
     <script type="text/javascript"> 
      //<![CDATA[ 
      $(function() { 
       $("button").click(function() { 
        $("textarea").val(
          $("textarea").val().replace(/[^\u0000-\u007E]/g, "") 
        ); 
        $("textarea").focus()[0].select(); 
       }); 
      }); //]]> 
     </script> 
    </head> 

    <body> 
     <textarea></textarea> 
     <button>Remove</button> 
    </body> 

</html> 
+0

Gracias. Corto y dulce. Tal vez implementaré esto en mi sitio web. Agregaré algunas cosas buenas como un informe de qué personajes se descartaron y dónde estaban. –

+2

moraleja de la historia es no copiar desde el búfer Javascript en jsfiddle. Usan personajes invisibles para hacer cosas extrañas allí. –

+0

Esta es una respuesta y responde la pregunta. pero es solo un enlace que puede morir. Agregue su código a la respuesta para que pueda ser útil para cuando eso ocurra ... – Neal

0

solución no técnica: pegar el texto en un nuevo mensaje de correo electrónico en Gmail y haga clic en Tx (formato claro, en el menú de formateo). Trabajó para mi.

+0

Puede hacer lo mismo con algo como Notepad.exe. Tiendo a hacer esto pero con Vim (podría pegarlo en Sublime Text, luego guardar como archivo, luego abrir desde Vim) –

3

puede usar regex para filtrar todo fuera de 0-127. Por ejemplo, en javascript:

text.replace(/[^\x00-\x7F]/g, "") 

x00 = 0, x7F = 127

+0

Esto solo conserva el conjunto de caracteres ascii, por lo que elimina todos los caracteres Unicode no occidentales. Solo queremos eliminar los caracteres de control, no las letras extranjeras. –

Cuestiones relacionadas