Asp.net 在URL中使用非拉丁字符

Asp.net 在URL中使用非拉丁字符,asp.net,iis-6,url-rewriting,friendly-url,non-ascii-characters,Asp.net,Iis 6,Url Rewriting,Friendly Url,Non Ascii Characters,我在一个网站上工作,客户已经翻译成克罗地亚语和斯洛文尼亚语。为了与我们现有的URL模式保持一致,我们生成了URL重写规则,这些规则模拟了应用程序的布局,这导致URL中有许多非ascii字符 示例šžč 有些链接是使用getURL从Flash触发的,有些是标准HTML链接。有些是程序响应。重定向,有些是通过向响应中添加301状态代码和位置头。我在IE6、IE7和Firefox3中进行测试,并且在互联网上,浏览器显示非拉丁字符的url编码 š = %c5%a1 ž = %c5%be č = %c4%

我在一个网站上工作,客户已经翻译成克罗地亚语和斯洛文尼亚语。为了与我们现有的URL模式保持一致,我们生成了URL重写规则,这些规则模拟了应用程序的布局,这导致URL中有许多非ascii字符

示例šžč

有些链接是使用getURL从Flash触发的,有些是标准HTML链接。有些是程序响应。重定向,有些是通过向响应中添加301状态代码和位置头。我在IE6、IE7和Firefox3中进行测试,并且在互联网上,浏览器显示非拉丁字符的url编码

š = %c5%a1
ž = %c5%be
č = %c4%8d
我猜这与IIS及其处理响应的方式有关

有没有人知道一种方法可以强制IIS不使用URL编码这些字符,或者我最好用非变音字符替换这些字符


谢谢,这些字符在URL中应该是有效的。我在一个大型旅游网站上做了URL搜索引擎优化工作,这就是我学到的。如果你不小心将变音符号强制转换为ascii,你可以改变单词的意思。通常没有翻译,因为变音符号只存在于它们的上下文中。

这些字符在URL.我在一个大型旅游网站上做了URL搜索引擎优化的工作,从中我学到了这一点。当你将变音符号强制转换为ascii时,如果你不小心的话,你可以改变单词的意思。通常没有翻译,因为变音符号只存在于它们的上下文中。

问问你自己,你是否真的希望它们非URL编码。如果一个用户不使用我不知道,但我不想冒险让世界上大部分的计算机无法访问我的网站的大部分

相反,请关注您为什么需要此功能。这是为了让url看起来漂亮吗?如果是这样,使用常规的z而不是ž就可以了。您是否将url用于用户输入?如果是这样,请在将其解析为链接输出之前对所有内容进行url编码,并在使用输入之前对其进行url解码。但不要在url中使用ž和其他本地字母

作为补充说明,在瑞典我们有å、ä和ö,但从来没有人在url中使用它们——我们使用a、a和o,因为浏览器不支持url。这并不让用户感到惊讶,也很少有人因为url中缺少å中的环而无法理解我们的目标词。文本仍然会正确显示在屏幕上页面,对吗?;)

问问你自己,你是否真的想让它们非url编码。当一个不支持这些字符的用户出现时会发生什么情况?我不知道,但我不想冒险让世界上大部分计算机无法访问我的网站

相反,请关注您为什么需要此功能。这是为了让url看起来漂亮吗?如果是这样,使用常规的z而不是ž就可以了。您是否将url用于用户输入?如果是这样,请在将其解析为链接输出之前对所有内容进行url编码,并在使用输入之前对其进行url解码。但不要在url中使用ž和其他本地字母

作为补充说明,在瑞典我们有å、ä和ö,但从来没有人在url中使用它们——我们使用a、a和o,因为浏览器不支持url。这并不让用户感到惊讶,也很少有人因为url中缺少å中的环而无法理解我们的目标词。文本仍然会正确显示在屏幕上佩奇,对吗?;)

有人知道强制IIS不进行URL编码的方法吗

您必须进行URL编码。在HTTP头中传递原始的“š”(\xC5\xA1)无效。浏览器可能会将错误修复为“%C5%A1”,但如果是这样,则结果与您刚编写“%C5%A1”时没有任何不同

在链接中包含一个原始的“š”本身并没有错,浏览器应该按照IRI规范将其编码为UTF-8和URL编码。但为了确保这确实有效,您应该确保包含链接的页面被作为UTF-8编码。同样,手动URL编码可能是最安全的

我对UTF-8 URL没有任何问题,你能链接到一个不起作用的示例吗

您是否有指向引用的链接,其中详细说明了哪些内容构成了有效的HTTP头

然而,在实践中,这有点无益。关键的一段是:

只有在根据RFC 2047的规则进行编码时,*文本的字才能包含ISO-8859-1以外的字符集中的字符

问题是,根据RFC 2047的规则,只有“原子”可以容纳2047的“编码字”。在大多数情况下,包含在HTTP中的文本不能被设计成原子。无论如何,RFC 2047是为RFC 822系列格式明确设计的,尽管HTTP看起来很像822格式,但实际上并不兼容;它有自己的基本语法,但有细微但显著的区别。HTTP规范中对RFC 2047的引用没有给出任何线索,说明人们如何能够以一致的方式解释它,据我所知,这是一个错误

在任何情况下,实际的浏览器都不会试图在其HTTP处理的任何地方找到解释RFC 2047编码的方法。虽然RFC 2616将非ASCII字节定义为ISO-8859-1,但实际上浏览器可以使用许多其他编码(如UTF-8,或任何系统默认编码)在处理HTTP头的不同位置。因此,即使依赖8859-1字符集也不安全!无论如何,这不会给您带来“š”

有人知道强制IIS不进行URL编码的方法吗

您必须进行URL编码。在HTTP头中传递原始的“š”(\xC5\xA1)无效。浏览器可能会将错误修复为“%C5%A1”,但如果是这样,则结果与您刚编写“%C5%A1”时没有任何不同

在链接中包含一个原始的“š”是不正确的