我有一个带有UTF-8编码链接的简单HTML页面。
<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编码(在Tomcat server.xml中为URIEncoding =“UTF-8”)。但是当然管理员不会让我在生产环境(Websphere)中这样做。
我知道使用Ajax很容易实现,但是在使用标准HTML链接时如何控制请求标头? charset
属性似乎对我不起作用(在IE8和FF 3.5中测试)
所需解决方案的第二部分是在使用Javascript更改IFrame的document.location
时设置URL编码。
答案 0 :(得分:20)
这不可能来自HTML。您可以获得的最接近的是accept-charset
的{{1}}属性。只有MSIE浏览器遵守这一点,但即便如此,它也是错误的(例如,当CP1252表示已发送ISO-8859-1时,实际已被使用)。其他浏览器完全忽略它,并且它们正在使用响应的<form>
标头中指定的字符集。正确设置字符编码基本上完全是服务器端的责任。客户端应该在服务器发送响应的同一个字符集中将其发回。
到目前为止,您应该完全从服务器端配置字符编码内容。为了克服无法编辑Content-Type
属性,SO上的某人写了一个(复杂的)过滤器:Detect the URI encoding automatically in Tomcat。您可能会发现它也很有用(注意:我没有测试过它)。
<强>更新强>:
需要注意的是,当通过HTTP传输内容时,问题中给出的元标记被忽略。相反,HTTP响应URIEncoding
标头将用于确定内容类型和字符编码。您可以在 Net 面板中确定HTTP标头,例如Firebug。