Très similaire à cette question , sauf pour Java.
Quelle est la méthode recommandée pour coder des chaînes pour une sortie XML en Java? Les chaînes peuvent contenir des caractères tels que "&", "<", etc.
Très similaire à cette question , sauf pour Java.
Quelle est la méthode recommandée pour coder des chaînes pour une sortie XML en Java? Les chaînes peuvent contenir des caractères tels que "&", "<", etc.
Comme d'autres l'ont mentionné, l'utilisation d'une bibliothèque XML est le moyen le plus simple. Si vous voulez vous échapper, vous pouvez regarder dans StringEscapeUtils
de la bibliothèque Apache Commons Lang .
Il suffit d'utiliser.
<![CDATA[ your text here ]]>
Cela permettra à tous les caractères sauf la fin
]]>
Vous pouvez donc inclure des caractères illégaux tels que & et>. Par exemple.
<element><![CDATA[ characters such as & and > are allowed ]]></element>
Cependant, les attributs devront être protégés car les blocs CDATA ne peuvent pas être utilisés pour eux.
Utilisez StringEscapeUtils.escapeXml(str)
de commons-lang
. Je l'utilise dans l'application App Engine - fonctionne à merveille.
Voici le Java Doc pour cette fonction:
Cela a bien fonctionné pour moi de fournir une version échappée d'une chaîne de texte:
public class XMLHelper {
/**
* Returns the string where all non-ascii and <, &, > are encoded as numeric entities. I.e. "<A & B >"
* .... (insert result here). The result is safe to include anywhere in a text field in an XML-string. If there was
* no characters to protect, the original string is returned.
*
* @param originalUnprotectedString
* original string which may contain characters either reserved in XML or with different representation
* in different encodings (like 8859-1 and UFT-8)
* @return
*/
public static String protectSpecialCharacters(String originalUnprotectedString) {
if (originalUnprotectedString == null) {
return null;
}
boolean anyCharactersProtected = false;
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < originalUnprotectedString.length(); i++) {
char ch = originalUnprotectedString.charAt(i);
boolean controlCharacter = ch < 32;
boolean unicodeButNotAscii = ch > 126;
boolean characterWithSpecialMeaningInXML = ch == '<' || ch == '&' || ch == '>';
if (characterWithSpecialMeaningInXML || unicodeButNotAscii || controlCharacter) {
stringBuffer.append("&#" + (int) ch + ";");
anyCharactersProtected = true;
} else {
stringBuffer.append(ch);
}
}
if (anyCharactersProtected == false) {
return originalUnprotectedString;
}
return stringBuffer.toString();
}
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.