1

我有使用 BlogEngine.NET 1.5 构建的俄语博客。

我在使用 URLEncode 编码的链接中使用俄语单词,因此链接在大多数浏览器中都是人类可读的 - FF、Chrome、Opera(IE 除外,但这不是这个浏览器的真正问题)。这个想法不是我的,我是从 Wikipedia 借来的——它在本地化网站上使用编码的 URL。

真正的问题是,当我尝试在 IE8 中添加评论时它失败了(并且仅在生产机器上,开发环境工作正常)。

使用 Fiddler 我发现 IE 尝试使用 WebForm_DoCallback 将 AJAX 回调发送到错误的地址 - 似乎它解码了 URL,获取错误的字符并从服务器询问具有错误地址的页面,并且(当然)收到 404。

以下是来自 IE 的错误请求在 Fiddler 中的外观:

POST /ru/post/�������������-�����.aspx HTTP/1.1

以下是 FF 发出相同请求并获得正确响应的方式:

POST /ru/post/%D0%92%D1%81%D1%82%D1%83%D0%BF%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5-%D1%81%D0%BB%D0%BE%D0%B2%D0%BE.aspx HTTP/1.1

我将解决方案从 BE 的默认 ASP.NET 2.0 升级到 ASP.NET 3.5,但这并没有改变。

请注意,我在 BE 中做了一些小改动,以允许正确编码的 UTF 链接——默认情况下,它会从链接中清除百分比符号。

谁能告诉我这里的 IE 行为有什么问题以及如何解决它?为什么 ASP.NET Development 下的开发环境与 IIS6 下的生产机器不同?为什么 IE 不解码地址栏中的链接(像其他浏览器一样)但在发出请求时会解码?

4

1 回答 1

0

这篇文章可能会有所帮助。

从解释 IE 功能的文章中:

如果 Web 浏览器在 http 标头或元标记中找不到任何 Content-Type,他们会怎么做?Internet Explorer 实际上做了一些非常有趣的事情:它试图根据各种字节在各种语言的典型编码中的典型文本中出现的频率来猜测使用了哪种语言和编码。因为各种旧的 8 位代码页倾向于将它们的国家字母放在 128 到 255 之间的不同范围内,并且因为每种人类语言都有不同的字母使用特征直方图,所以这实际上是有机会的。

确保网页头部的第一个元标记包含以下内容:

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
于 2010-01-04T18:10:38.183 回答