Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设置;内容类型。。。“字符集”;在请求头中使用HTML链接_Html_Character Encoding_Special Characters_Urlencode - Fatal编程技术网

如何设置;内容类型。。。“字符集”;在请求头中使用HTML链接

如何设置;内容类型。。。“字符集”;在请求头中使用HTML链接,html,character-encoding,special-characters,urlencode,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&

我有一个简单的带有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>

但是,我没有让浏览器包含
内容类型: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编码

这在HTML上是不可能的。您可以获得的最接近的属性是
accept字符集。只有MSIE浏览器坚持这一点,但即使如此,它也做得不对(例如,当它说它已发送ISO-8859-1时,实际上使用了CP1252)。其他浏览器完全忽略了它,它们使用响应的
内容类型
标题中指定的字符集。设置正确的字符编码基本上完全由服务器端负责。客户端应该将其发送回服务器发送响应时使用的字符集

至此,您应该完全从服务器端配置字符编码。为了克服无法编辑
URIEncoding
属性的问题,这里有人编写了一个(复杂的)过滤器:。您可能会发现它也很有用(注意:我还没有测试过它)


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


好的,谢谢。我现在似乎明白了。但是如何在服务器端设置字符集呢?我的初始页面是一个带有
的静态html文件,但Web服务器在发送它时,HTTP头中没有字符集信息。您知道关于HTTP和HTML头中的编码信息应该如何协同工作的任何资源吗?为什么我们都需要它们呢?当页面通过HTTP提供服务时,meta标记被忽略(请参阅答案更新)。当使用JSP时,应该将
放在顶部。使用Servlet时,应该执行
response.setCharacterEncoding(“UTF-8”)。两者都将在内容类型头中隐式设置正确的字符集。您可能会发现本文很有用:。对于JSP/Servlet解决方案,从.Awesome开始。每天我都能学到这样的东西,这肯定是一个很棒的日子。@BalusC:我发现一个服务器允许用户上传任意内容,但总是设置相同的内容类型。
X-Content-type-Options
没有设置,但现代浏览器不再倾向于进行mime类型嗅探。那么有没有办法用ʜ覆盖服务器提供的mime类型ᴛᴍʟ ? (忽略剥离的html属性)
charset
属性不是很有用,现在不推荐使用。看这个相关的问题:你链接到的问题实际上与这个问题无关。然而,很明显,是的,我并不是说这两个问题是重复的。