Java EE具有ServletRequest.getParameterValues().
在非EE平台上,URL.getQuery()只返回一个字符串.
什么是正确分析查询字符串中当URL以正常的方式不是基于Java EE?
< rant >
在尝试制作自己的解析器的答案中很受欢迎.这是一个非常有趣和令人兴奋的微编码项目,但我不能说这是一个好主意 :(
下面的代码片段通常有缺陷或破损,顺便说一下.打破它们对读者来说是一个有趣的练习. 并且黑客攻击使用它们的网站.
解析查询字符串是一个定义明确的问题,但阅读规范和理解细微差别并非易事.让一些平台库编码器做出艰苦的工作,并为您做好修复,这要好得多!
< / rant >
假设我有:
<a href="http://www.yahoo.com/" target="_yahoo"
title="Yahoo!™" onclick="return gateway(this);">Yahoo!</a>
<script type="text/javascript">
function gateway(lnk) {
window.open(SERVLET +
'?external_link=' + encodeURIComponent(lnk.href) +
'&external_target=' + encodeURIComponent(lnk.target) +
'&external_title=' + encodeURIComponent(lnk.title));
return false;
}
</script>
Run Code Online (Sandbox Code Playgroud)
我已经确认external_title
将编码Yahoo!%E2%84%A2
并传递给SERVLET
.如果SERVLET
我在做:
Writer writer = response.getWriter();
writer.write(request.getParameter("external_title"));
Run Code Online (Sandbox Code Playgroud)
我在浏览器中获得了Yahoo!¢.如果我手动将浏览器字符编码切换为UTF-8,它将更改为Yahoo! TM(这就是我想要的).
所以我认为我发送到浏览器的编码是错误的(确实如此Content-type: text/html; charset=ISO-8859-1
).我改为SERVLET
:
response.setContentType("text/html; charset=utf-8");
Writer writer = response.getWriter();
writer.write(request.getParameter("external_title"));
Run Code Online (Sandbox Code Playgroud)
现在浏览器字符编码是UTF-8,但它输出Yahoo!但我无法让浏览器呈现正确的字符.
我的问题是:是否存在某些组合Content-type
和/或new String(request.getParameter("external_title").getBytes(), "UTF-8");
和/或其他会导致Yahoo! TM出现在SERVLET
输出中?