使用Mojarra 2.1.7
代码
<h:outputLink value="index.jsf">Login page
<f:param name="test" value="! åöä"></f:param>
</h:outputLink>
输出: index.jsf?test =%21 +åöä
有些角色逃脱了,但其他角色没有逃脱。显然很难处理。
为什么会这样,有人知道管理这个的好方法吗?
http://docs.oracle.com/javase/6/docs/api/java/net/URLEncoder.html
似乎要使用,因为它用+。
解析空间所有其他字符都不安全,首先转换为一个或 使用某种编码方案的更多字节。然后表示每个字节 由3个字符的字符串“%xy”,其中xy是两位十六进制 字节的表示。推荐使用的编码方案是 UTF-8。但是,出于兼容性原因,如果不进行编码 指定,然后使用平台的默认编码。
感谢答案
答案 0 :(得分:1)
难道您不会将JSF生成的HTML代码与您在浏览器状态或地址栏中看到的内容混淆吗?当然,它已经在生成的HTML代码中完全进行了URL编码。我刚刚做了一个快速测试,并根据浏览器中的 View Source 生成(假设您没有更改UTF-8的JSF2 / Facelets默认响应编码)以下HTML:< / p>
<a href="index.jsf?test=%21+%C3%A5%C3%B6%C3%A4">Login page</a>
但实际上,当您点击链接时,Chrome和Firefox会在浏览器的状态栏中显示index.jsf?test=%21+åöä
,当您点击该链接时,也会在地址栏中显示URIEncoding
。这只是一个特定于浏览器的功能,这是一个完全不同的问题。
我不确定你的具体问题是什么,因为你没有说出任何关于它的信息,但你提出这个问题的方式让我觉得请求URL没有被相关的servletcontainer正确地进行URL解码因此,您在访问请求参数时收到了mojibake。
正如您现在可能已经猜到的那样,这必须在servletcontainer方面解决。目前还不清楚你正在使用哪一个,所以这里有Tomcat和Glassfish的一些例子:
在Tomcat中,您需要将Tomcat <Connector>
中server.xml
元素的UTF-8
属性设置为<Connector ... URIEncoding="UTF-8">
。
<parameter-encoding>
在Glassfish中,您需要将/WEB-INF/glassfish-web.xml
添加到<parameter-encoding default-charset="UTF-8" />
:
+
关于“解析”(实际上,“编码”是正确的术语)%20
的空间,我不知道你为什么指出这一点,但这只是URL查询字符串中的空格如何应该编码。我认为你期望它是?
,但这只是如何对URL的层次结构部分(查询字符串之前的部分,由{{1}}分隔)中的空格进行编码。