Java -> Apache Commons StringEscapeUtils -> escapeJavaScript
-
05-07-2019 - |
Pergunta
Para uma pesquisa de nome ajax muito simples, eu estou enviando um id no site do cliente para o servidor (Tomcat 5.5, Java 5), ??procurando-lo em um banco de dados e devolver uma cadeia, que é atribuído a uma variável javascript de volta ao cliente (e, em seguida, exibido).
O código javascript que recebe o valor é bastante normal:
//client code - javascript
xmlHttp.onreadystatechange=function() {
if (xmlHttp.readyState==4) {
var result = xmlHttp.responseText;
alert(result);
...
}
...
}
Para voltar a corda, eu originalmente tinha isso no servidor:
//server code - java
myString = "...";
out.write(myString.getBytes("UTF-8"));
O que funcionou perfeitamente, se inseguro. Mais tarde, eu substituí-lo com:
import org.apache.commons.lang.StringEscapeUtils;
...
myString = "...";
out.write(StringEscapeUtils.escapeJavaScript(myString).getBytes("UTF-8"));
Mas, enquanto mais seguro, a string resultante pode não ser exibido corretamente se ele contém caracteres especiais, como "n".
Por exemplo, usando:
escapeJavaScript("años").getBytes("UTF-8");
envia:
an\u00F1os
para o cliente.
A pergunta: existe uma maneira simples de analisar a cadeia resultando em Javascript ou há uma função de saída alternativa que eu posso usar em java que impeça esta questão
?Solução
As seguintes obras em todos os navegadores que eu tentei:
javascript:alert("a\u00F1os");
Talvez a seqüência está sendo escapou duas vezes por engano.
Outras dicas
Na verdade, agora que eu li sobre isso, eu acho que realmente não necessidade de escapar a corda Estou enviando de volta em tudo ... Ou seja, StringEscapeUtils.escapeJavaScript seria útil se o valor resultante foi impresso na página, como:
//javascript code with inline struts
var myJavasriptString = "<%=myJavaString%>";
Ou estou faltando alguma coisa e ainda haveria uma razão válida para fazer a escapatória no caso original? (Quando ele é retornado como uma série de bytes de volta a um ajax onreadystatechange manipulador e atribuído a uma variável js)