Для очень простого поиска имени ajax я отправляю идентификатор с веб-страницы клиента на сервер (Tomcat 5.5, Java 5), ищу его в базе данных и возвращаю строку, которая присваивается переменной javascript обратно в клиент (а затем отображается).
Код javascript, который получает значение, довольно стандартный:
//client code - javascript
xmlHttp.onreadystatechange=function() {
if (xmlHttp.readyState==4) {
var result = xmlHttp.responseText;
alert(result);
...
}
...
}
Чтобы вернуть строку, у меня изначально было это на сервере:
//server code - java
myString = "...";
out.write(myString.getBytes("UTF-8"));
Который работал отлично, хотя и небезопасно. Позже заменил на:
import org.apache.commons.lang.StringEscapeUtils;
...
myString = "...";
out.write(StringEscapeUtils.escapeJavaScript(myString).getBytes("UTF-8"));
Но, что безопаснее, результирующая строка не может быть правильно отображена, если она содержит специальные символы, такие как «ñ».
Например, используя:
escapeJavaScript("años").getBytes("UTF-8");
отправляет:
an\u00F1os
клиенту.
Вопрос: есть ли простой способ проанализировать полученную строку в Javascript или есть альтернативная функция escape, которую я могу использовать в java, которая предотвратила бы эту проблему?




Следующее работает во всех браузерах, которые я пробовал:
javascript:alert("a\u00F1os");
Возможно, ваша строка дважды экранируется по ошибке.
На самом деле, теперь, когда я его перечитал, я думаю, что на самом деле не нужно вообще избежать строки, которую я отправляю обратно ... То есть StringEscapeUtils.escapeJavaScript был бы полезен, если бы полученное значение было напечатано на странице, например:
//javascript code with inline struts
var myJavasriptString = "<%=myJavaString%>";
Или я что-то упустил, и в исходном случае все еще есть веская причина для побега? (когда он возвращается в виде серии байтов обратно в обработчик ajax onreadystatechange и назначается переменной js)
Да, я думаю, что в этом конкретном случае побег не нужен (см. Другой мой комментарий ниже)