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

HAL*_*000 19 html urlencode character-encoding special-characters

我有一个带有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>
Run Code Online (Sandbox Code Playgroud)

但是,我没有让浏览器包含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中测试)

所需解决方案的第二部分是在document.location使用Javascript 更改IFrame时设置URL编码.

Bal*_*usC 20

这不可能来自HTML.你能得到的最接近的是accept-charset属性<form>.只有MSIE浏览器遵守这一点,但即便如此,它也是错误的(例如CP1252 实际上在它说它已发送ISO-8859-1时使用).其他浏览器完全忽略它,并且它们正在使用Content-Type响应标头中指定的字符集.正确设置字符编码基本上完全是服务器端的责任.客户端应该在服务器发送响应的同一个字符集中将其发回.

到目前为止,您应该完全从服务器端配置字符编码内容.为了克服无法编辑URIEncoding属性,SO上的某人写了一个(复杂的)过滤器:在Tomcat中自动检测URI编码.您可能会发现它也很有用(注意:我还没有测试过).


更新:注意到,当内容通过HTTP传输时,您的问题中给出的元标记将被忽略.相反,HTTP响应Content-Type头将用于确定内容类型和字符编码.您可以在Net面板中使用例如Firebug确定HTTP标头.

替代文字