我有一个简单的HTML页面与UTF-8编码链接.
<html> <head> <Meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <a charset='UTF-8' href='http://server/search?q=%C3%BC'>search for "ü"</a> </body> </html>
但是,我没有让浏览器包含Content-Type:application / x-www-form-urlencoded; charset = utf-8进入请求头.因此,我必须配置Web服务器以假定所有请求都是UTF-8编码的(URIEncoding =“UTF-8”在Tomcat server.xml中).但是当然管理员不会让我在生产环境(Websphere)中这样做.
我知道使用Ajax很容易实现,但是如何在使用标准HTML链接时控制请求头? charset属性似乎不适用于我(在IE8和FF 3.5中测试)
所需解决方案的第二部分将是使用Javascript更改IFrame的document.location时设置URL编码.
解决方法
这是不可能从HTML上.最接近的是< form>的accept-charset属性.只有MSIE浏览器坚持,但即使这样做也是错误的(例如,CP1252实际上已被用于发送ISO-8859-1).其他浏览器完全忽略它,它们正在使用响应的Content-Type标头中指定的字符集.设置字符编码权利基本上完全是服务器端的责任.客户端应该将其发送回与服务器发送响应相同的字符集.
至此,您应该真正从服务器端配置字符编码的东西.为了克服无法编辑URIEncoding属性,SO上的某个人写了一个(复杂的)过滤器:Detect the URI encoding automatically in Tomcat.你可能会发现它也很有用(注意:我还没有测试过).
更新:
应该注意的是,当内容通过HTTP传输时,您的问题中给出的元标记将被忽略.相反,HTTP响应Content-Type头将用于确定内容类型和字符编码.您可以在“Net”面板中确定HTTP标头,例如Firebug.