2011-04-21 66 views
11

En Java, ¿hay una fuente de terceros disponible o un comando rápido para convertir html caracteres especiales en una cadena en contenido html codificado?Cómo codificar caracteres especiales en contenido html

Por ejemplo:

Original code:  <>&abcdef © 
After encoding: &lt;&gt;&amp;abcdef&copy; 
+0

Si tiene una entrada como esta (HTML mezclado con uncapeado no HTML), ya está potencialmente regado. Escapar HTML caracteres especiales es específicamente para evitar la ambigüedad con HTML real, que puede no ser posible resolver más adelante. – deceze

+0

El ejemplo anterior no se puede hacer exactamente como está. Su texto no es HTML válido y no encontrará herramientas y no podrá escribir programas que funcionen correctamente en HTML no válido, porque no puede definir el comportamiento adecuado. – Notinlist

+0

Estoy usando Java ... – Roshan

Respuesta

6

Si desea convertir una cadena a entidades HTML para probar algo de forma rápida, puede utilizar servicios web como éste:

http://www.primitivetype.com/resources/htmlentities.php

[EDIT] Para Java puede usar StringEscapeUtils de Apache Commons Lang. Ver este hilo: Recommended method for escaping HTML in Java

import static org.apache.commons.lang.StringEscapeUtils.escapeHtml; 
// ... 
String source = "The less than sign (<) and ampersand (&) must be escaped before using them in HTML"; 
String escaped = escapeHtml(source); 

I prestado el ejemplo de la rosca mencionado anteriormente.

+0

Si desea hacerlo en código, usted Tenemos que decirnos qué lenguaje de programación está usando –

+0

Quiero una solución en java – Roshan

+0

Creo que reemplazará todo Roshan

2

Convertir

< → & lt;

> → & gt;

' → & # 39;

" → & quot;

& → & amp;

fuente de conocimiento: http://hu.php.net/manual/en/function.htmlspecialchars.php

+0

Puede implementarlo en javascript o cualquier idioma fácilmente – Notinlist

+0

¡Gracias! Estaba buscando esta "tabla" de equivalencia ... Desafortunadamente, el enlace está roto, pero los caracteres principales están ahí :) –

0

Aquí hay un código java para replicar htmlspecialchars por defecto de PHP (str) lo más cerca como sea posible:

Primero veamos cómo htmlspecialchars(str) obras de PHP:

php> echo htmlspecialchars("abc\ndef"); 
abc 
def 
php> echo htmlspecialchars("abc&def"); 
abc&amp;def 
php> echo htmlspecialchars("abc<>\"&def"); 
abc&lt;&gt;&quot;&amp;def 
php> echo htmlspecialchars("abc<>\"&d'ef"); 
abc&lt;&gt;&quot;&amp;d'ef 
php> echo htmlspecialchars("abc< >\"&d'ef"); 
abc&lt; &gt;&quot;&amp;d'ef 
php> echo htmlspecialchars("abc def"); 
abc def 
php> 

Notas:

  1. espacios y saltos de línea se mantienen tal cual.
  2. Las entidades definidas se reemplazan una vez por instancia.
  3. Alas adicionales como el copyright © y el símbolo del euro se mantienen tal como están.

El código:

public class Main{ 
    public static void main(String[] args) { 
     System.out.println("'" + stringToHtmlString("&") + "'"); 
     System.out.println("'" + stringToHtmlString("<") + "'"); 
     System.out.println("'" + stringToHtmlString(">") + "'"); 
     System.out.println("'" + stringToHtmlString(" ") + "'"); 
     System.out.println("'" + stringToHtmlString("  ") + "'"); 
     System.out.println("'" + stringToHtmlString("&<>abc") + "'"); 
     System.out.println("'" + stringToHtmlString("abc&<>") + "'"); 
    } 
    public static final String stringToHtmlString(String s){ 
     StringBuffer sb = new StringBuffer(); 
     int n = s.length(); 
     for (int i = 0; i < n; i++) { 
      char c = s.charAt(i); 
      switch (c) { 
      case '<': sb.append("&lt;"); break; 
      case '>': sb.append("&gt;"); break; 
      case '&': sb.append("&amp;"); break; 
      case '"': sb.append("&quot;"); break; 
      default: sb.append(c); break; 
      } 
     } 
     return sb.toString(); 
    } 
} 

que imprime:

[email protected] ~ $ java Main 
'&amp;' 
'&lt;' 
'&gt;' 
' ' 
'  ' 
'&amp;&lt;&gt;abc' 
'abc&amp;&lt;&gt;' 

No es un clon perfecto de la función de PHP htmlspecialchars(str), pero es lo suficientemente cerca para mí.

Aquí hay otro que realiza las conversiones de entidades html para conjuntos de caracteres ofuscado: http://www.rgagnon.com/javadetails/java-0306.html

0

Esto es viejo, pero no tienen ni han respuesta aceptada, esta es mi versión de la pizca de Java pura:

public String toHTML(String str) { 
    String out = ""; 
    for (char c: str.toCharArray()) { 
     if(!Character.isLetterOrDigit(c)) 
      out += String.format("&#x%x;", (int)c); 
     else 
      out += String.format("%s", c); 

    } 
    return out; 
} 

Funciona muy bien con html5 y utf-8. (lo siento por mi mal inglés).

Cuestiones relacionadas