2009-02-12 26 views
5

En mi aplicación Rubí, he utilizado el siguiente método y expresión regular para eliminar todas las etiquetas HTML de una cadena:Problema con la expresión regular para eliminar las etiquetas HTML

str.gsub(/<\/?[^>]*>/,"") 

Esta expresión regular hizo casi todo lo lo esperaba, excepto que provocó que todas las comillas se transformaran en &#8220; y todas las comillas simples se cambiaran a &#8221; .

¿Qué es lo obvio que me falta para convertir los códigos desordenados en sus propios personajes?

Editar: El problema ocurre con o sin la expresión regular, por lo que está claro que mi problema no tiene nada que ver con eso. Mi pregunta ahora es cómo lidiar con este error de formato y corregirlo. ¡Gracias!

+0

¿Está utilizando algún tipo de "quote beautifier"? – Gumbo

Respuesta

-3

Puede utilizar un sistema de varios pasos para obtener los resultados que busca.

Después de ejecutar su expresión regular, ejecute una expresión para convertir 8220; a las cotizaciones y otra para convertir & 8221; para comillas simples.

2

Vas a correr en más problemas cuando se ve algo como:

<doohickey name="<foobar>"> 

Usted quiere aplicar algo como:

gsub(/<[^<>]*>/, "") 

... durante el tiempo que el coincide con el patrón.

+0

A menos que quisieras decir que el OP debe estar preparado para tratar con HTML falso/inválido, te equivocas. Esta forma nunca aparecerá en HTML correcto. –

2

Esta expresión regular hizo casi todo lo que esperaba que, excepto que causó todas las comillas para ser transformados en “ y todas comillas simples para cambiar a ” .

Esto no suena como si la expresión regular estaría haciendo esto. ¿Estás seguro de que es diferente antes?

Ver esta pregunta aquí para obtener información sobre el problema, se ha conseguido una excelente respuesta:
Get non UTF-8 form fields as UTF-8 in php.

+0

Santa vaca, tienes razón. Lo noté después de agregar Regex, pero el efecto en los personajes ocurre de cualquier manera. Simplemente no lo había notado debido a que era menos obvio. Entonces mi pregunta es: ¿Cómo arreglo este formato? – btw

0

me he encontrado con un problema similar con carácter cambia, esto sucedió cuando mi código corrió a través de otro módulo que aplicación de codificación UTF-8 y luego, cuando volvió, tenía un archivo diferente (conjunto de líneas arrastrado) en mis manos.

5

uso de CGI :: unescapeHTML después de realizar su sustitución expresión regular:

CGI::unescapeHTML(str.gsub(/<\/?[^>]*>/,"")) 

Ver http://www.ruby-doc.org/core/classes/CGI.html#M000547

En el fragmento de código anterior, gsub elimina todas las etiquetas HTML. Entonces, unescapeHTML() revierte todas las entidades HTML (como <, & # 8220) a sus caracteres reales (<, citas, etc.)

Con respecto a otro puesto en esta página, cuenta que se le no siempre pueden pasar HTML como

<tag attribute="<value>">2 + 3 < 6</tag> 

(que es HTML no válido); lo que puede recibir es, en su lugar:

<tag attribute="&lt;value&gt;">2 + 3 &lt; 6</tag> 

La llamada a gsub transformará la anterior a:

2 + 3 &lt; 6 

Y unescapeHTML terminará el trabajo:

2 + 3 < 6 
Cuestiones relacionadas