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&def
php> echo htmlspecialchars("abc<>\"&def");
abc<>"&def
php> echo htmlspecialchars("abc<>\"&d'ef");
abc<>"&d'ef
php> echo htmlspecialchars("abc< >\"&d'ef");
abc< >"&d'ef
php> echo htmlspecialchars("abc def");
abc def
php>
Notas:
- espacios y saltos de línea se mantienen tal cual.
- Las entidades definidas se reemplazan una vez por instancia.
- 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("<"); break;
case '>': sb.append(">"); break;
case '&': sb.append("&"); break;
case '"': sb.append("""); break;
default: sb.append(c); break;
}
}
return sb.toString();
}
}
que imprime:
[email protected] ~ $ java Main
'&'
'<'
'>'
' '
' '
'&<>abc'
'abc&<>'
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
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
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
Estoy usando Java ... – Roshan