我有一些简单的HTML,它有一个指向另一个HTML文件的链接 - 但该文件名包含一个unicode字符。根据我对链接的编码方式,Windows上的IE将无法打开它 - 但是所有其他浏览器(Windows和Mac)上的链接都是相同的。任何指针都是最受欢迎的。
这里似乎关键是我在本地磁盘上打开HTML(即它不是由Web服务器提供的。)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>website</title>
</head>
<body>
<a href="%C3%A9.html">Fails on IE - works everywhere else (Firefox, Chrome, Safari)</a>
<p />
<a href="é.html">Works on IE</a>
</html>
由于
克雷格
答案 0 :(得分:3)
以下有关MSDN的IEBlog文章对此进行了讨论:
非US-ASCII字符
US-ASCII之外的字符可能出现在Windows文件路径中,因此它们在文件IRI中被允许。 (URI仅定义为US-ASCII,因此当在字符串中包含非US-ASCII字符时,您实际创建的内容称为IRI:国际化资源标识符。)不要使用百分比编码的八位字节表示非US-ASCII字符,因为在文件URI中,百分比编码的八位字节被解释为用户当前代码页中的一个字节。包含US-ASCII之外字节的百分比编码八位字节的URI的含义将根据查看文档的区域设置进行更改。相反,表示非US-ASCII字符,您应该直接在编写IRI的文档的编码中使用该字符。例如:
不正确:file:/// C:/example%E3%84%93.txt
正确:file:/// C:/ exampleㄓ.txt
换句话说,由于您的HTML使用的是UTF-8,因此URL必须使用非{%}编码的UTF-8八位字节作为é
字符,这就是é.html
有效的原因%C3%A9.html
1}}失败 - 例如,没有名为é.html
的文件。
这就是Internet Explorer的设计工作方式。这不是一个bug。其他浏览器只是在做一些不同的事情,就是这样。除非您可以将Web服务器配置为向IE提供与其他浏览器不同的HTML,否则您将不得不使用客户端技术,例如条件注释,例如:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">
<title>website</title>
</head>
<body>
<!--[if IE]>
<a href="é.html">Works on IE</a>
<![endif]-->
<!--[if !IE]> -->
<a href="%C3%A9.html">Works everywhere else</a>
<!-- <![endif]-->
</html>
需要X-UA-Compatible
元标记,因为Microsoft removed support for HTML conditional comments in IE 10实现了对HTML5的支持。