我有一个Servlet,从客户端接收一些参数,然后执行一些任务。
而来自客户端的参数是中文,因此我经常在Servlet中得到一些无效字符。
例如:
如果我输入
在servlet中,'type'参数是正确的(测试),但是'q'参数没有正确编码,它们变成了无法解析的无效字符。
然而,如果我再次输入地址栏,URL将会改变为:
现在我的servlet将获取'q'的正确参数。
问题是什么?
更新
顺便说一下,当我用post发送表单时,它可以正常工作。但是当我在ajax中发送它们时,例如:
然后,服务器端也收到了无效字符。
似乎只有当中文字符被编码为 %xx 时,服务器端才能得到正确的结果。
也就是说,
但是为什么 "
http://localhost:8080/Servlet?q=中文&type=test
在servlet中,'type'参数是正确的(测试),但是'q'参数没有正确编码,它们变成了无法解析的无效字符。
然而,如果我再次输入地址栏,URL将会改变为:
http://localhost:8080/Servlet?q=%D6%D0%CE%C4&type=test
现在我的servlet将获取'q'的正确参数。
问题是什么?
更新
顺便说一下,当我用post发送表单时,它可以正常工作。但是当我在ajax中发送它们时,例如:
url="http://..q='中文',
xmlhttp.open("POST",url,true);
然后,服务器端也收到了无效字符。
似乎只有当中文字符被编码为 %xx 时,服务器端才能得到正确的结果。
也就是说,
http://.../q=中文
不起作用,http://.../q=%D6%D0%CE%C4
起作用。但是为什么 "
http://www.google.com.hk/search?hl=zh-CN&newwindow=1&safe=strict&q=%E4%B8%AD%E6%96%87&btnG=Google+%E6%90%9C%E7%B4%A2&aq=f&aqi=&aql=&oq=&gs_rfai=
" 起作用?
![alt text](https://istack.dev59.com/PKkIw.webp)
encodeURIComponent()
编码。或者,使用jQuery,当将参数作为$.ajax()
函数的data
参数发送时,它会自动处理。 - BalusC