Pour une recherche de noms ajax très simple, j'envoie un identifiant de la page Web du client au serveur (Tomcat 5.5, Java 5), le recherchant dans une base de données et retournant un string, qui est assignée à une variable javascript dans le client (et ensuite affichée).Java -> Apache Commons StringEscapeUtils -> escapeJavaScript
Le code javascript qui reçoit la valeur est assez standard:
//client code - javascript
xmlHttp.onreadystatechange=function() {
if (xmlHttp.readyState==4) {
var result = xmlHttp.responseText;
alert(result);
...
}
...
}
Pour retourner la chaîne, j'avais d'abord ce dans le serveur:
//server code - java
myString = "...";
out.write(myString.getBytes("UTF-8"));
Ce qui a parfaitement fonctionné, si dangereux. Plus tard, je l'ai remplacé avec:
import org.apache.commons.lang.StringEscapeUtils;
...
myString = "...";
out.write(StringEscapeUtils.escapeJavaScript(myString).getBytes("UTF-8"));
Mais en plus sûr, la chaîne résultante ne peut pas être affiché correctement si elle contient des caractères spéciaux comme « ñ ».
Par exemple, en utilisant:
escapeJavaScript("años").getBytes("UTF-8");
envoie:
an\u00F1os
au client.
La question: existe-t-il un moyen simple d'analyser la chaîne résultante en Javascript ou existe-t-il une autre fonction d'échappement que je peux utiliser dans Java pour éviter ce problème?
Oui, je pense que dans ce cas particulier l'évasion était inutile (voir mon autre commentaire ci-dessous) –