j'utilise actuellement org.Apache.commons.lang.StringEscapeUtils escapeHtml()
pour échapper aux balises HTML non désirées dans mes chaînes, mais je me suis rendu compte qu'il échappait aussi aux caractères accentués à &something;,
, ce que je ne veux pas.
Connaissez-vous une solution pour échapper aux balises HTML mais laissez mes lettres spéciales (bien, pour certaines personnes, elles sont normales ici;]) telles quelles?
Merci d'avance!
balázs
StringUtils.replaceEach(str, new String[]{"&", "\"", "<", ">"}, new String[]{"&", """, "<", ">"})
Si c'est pour Android, utilisez plutôt TextUtils.htmlEncode(String)
.
Cela me semble très bien:
org/Apache/commons/lang3/StringEscapeUtils.html # escapeXml (Java.lang.String)
En demandant XML, vous obtiendrez XHTML, qui est un bon HTML.
Voici une version qui remplace les six caractères significatifs comme recommandé par OWASP . Cela convient aux éléments de contenu HTML tels que <textarea>...</textarea>
, mais pas aux attributs HTML tels que <input value="...">
car ces derniers ne sont souvent pas cités.
StringUtils.replaceEach(text,
new String[]{"&", "<", ">", "\"", "'", "/"},
new String[]{"&", "<", ">", """, "'", "/"});
Je sais qu'il est trop tard pour ajouter mon commentaire, mais peut-être que le code suivant sera utile:
public static String escapeHtml(String string) {
StringBuilder escapedTxt = new StringBuilder();
for (int i = 0; i < string.length(); i++) {
char tmp = string.charAt(i);
switch (tmp) {
case '<':
escapedTxt.append("<");
break;
case '>':
escapedTxt.append(">");
break;
case '&':
escapedTxt.append("&");
break;
case '"':
escapedTxt.append(""");
break;
case '\'':
escapedTxt.append("'");
break;
case '/':
escapedTxt.append("/");
break;
default:
escapedTxt.append(tmp);
}
}
return escapedTxt.toString();
}
prendre plaisir!
Si vous utilisez Wicket, utilisez:
import org.Apache.wicket.util.string.Strings;
...
CharSequence cs = Strings.escapeMarkup(src);
String str = Strings.escapeMarkup(src).toString();