如何使用HTML链接在请求标头中设置“Content-Type ... charset”

时间:2011-06-03 15:13:53

标签: html character-encoding special-characters urlencode

我有一个带有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编码。

1 个答案:

答案 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

alt text

相关问题