2010-05-11 20 views
42

Necesito una forma de identificar ciertas cadenas en el marcado HTML. Sé cuáles son las cadenas, pero es posible que puedan ser subcadenas de otras cadenas en el documento. Para encontrarlos, genero un caracter delimitador especial (actualmente usando \032). En la carga de la página, vamos a través del HTML y registramos la ubicación de las cadenas, y eliminamos el delimitador.Delimitador invisible para cadenas en HTML

Desafortunadamente, la mayoría de los navegadores muestran el carácter delimitador hasta que podamos encontrarlos y eliminarlos todos. Me gustaría evitar eso si es posible. ¿Hay un carácter o cadena que se conservará en el contenido HTML (por lo que un comentario no funcionará) pero no será visible para el usuario? También debe ser algo que es poco probable que aparezca junto a una cadena, por lo que algo como   tampoco funcionaría.

EDITAR: Perdón, olvidé mencionar que las cadenas estarán en atributos, por lo que cualquier tipo de etiqueta no funcionará.

+2

¿Tal vez podría simplemente usar un montón de etiquetas ''? – Thomas

+1

Estoy de acuerdo con Thomas, pero agregaría que debería agregarles una clase como Por eso serían fáciles de encontrar y manipular. – joatis

Respuesta

112

‌ - anchura cero no Joiner (ver http://htmlhelp.org/reference/html40/entities/special.html)

En la remota posibilidad de que esta ya aparece en el texto, el doble hacia arriba (por ejemplo: ‌‌mytext‌‌


Editar en respuesta a comentario:. funciona en Firefox 3. tenga en cuenta que usted tiene que buscar el valor Unicode de la entidad

<html> 
<body> 
    <div id="test"> 
     This is a &zwnj;test 
    </div> 

    <script type="application/javascript"> 
     var myDiv = document.getElementById("test"); 
     var content = myDiv.innerHTML; 
     var pos = content.indexOf("\u200C"); 
     alert(pos); 
    </script> 
</body> 
</html> 
+0

¡Perfecto! Ese código hace el truco. – noah

+1

Probablemente me hayas ahorrado algunas horas de googlear – Linas

+1

¡¡¡Impresionante !!! Gracias. –

4

Puede insertarlos en elementos <span>. Esto funcionará solo para el texto dentro de la página (no atributos, o similares).

De lo contrario, se podría insertar un carácter de espacio en blanco que su programa no lo hace ya la salida como parte del HTML, como un carácter de tabulación (\x09), una pestaña vertical (\x0b), un retorno de carro desnudo (\x0d) — sin una nueva línea al lado, ala codificación de texto de Windows — o solo un byte nulo (\x00).

+0

¡Pestaña vertical! Esa es buena. Voy a intentar eso. – noah

+0

Windows nunca usó retorno de carro sin una nueva línea después de él; siempre usa ambos en sucesión. Estás pensando en viejos Macs. –

+0

Por lo tanto, el problema con los espacios en blanco es que el DOM se normalizará y de lo contrario se meterá con ellos, por lo que no se podrán encontrar de manera confiable más adelante. Las TV tienden a convertirse en espacios en el DOM. – noah

3

Lo mejor que me gustaría insertar, que no está visible en el navegador, será un par de etiquetas con alguna identificación especial, como <span id="delimiter" class="Delimiter"></span>. Esto no aparecerá en el contenido, mientras que esto puede estar presente en el documento. No necesita eliminarlos.

+0

Lo sentimos, olvidé mencionar que las cadenas también aparecen en los atributos, por lo que las etiquetas terminarán codificadas. – noah

0

usted podría utilizar left-to-right (LTR) marks. ¿Esto es para algún tipo de prueba XSS? Si es así, esto podría ser de interés: Taint support for PHP

+0

No XSS realated. ¿Qué son las marcas LTR? – noah

+0

Marcan la dirección de escritura de izquierda a derecha en Unicode. No tienen ningún efecto cuando el idioma es de izquierda a derecha de todos modos. – Tgr

Cuestiones relacionadas