带有特殊字符和 IE 的 url 参数值

本文关键字:url 参数 IE 特殊字符 | 更新日期: 2023-09-27 17:56:47

有一个从另一个系统打开的网页,其参数可以包含扩展的 ASCII 字符:

http://<host>/submitpage.cshtml?pname=SomeName

cshtml 网页像往常一样读取参数:

var pname = Request["pname"];

并将其显示在页面上,并带有@pname

适用于所有

浏览器,除了 IE(甚至 IE11)当 pname=Günther 或其他带有外语字符的名称; ü、ø 等。

Example:
http://<host>/submitpage.cshtml?pname=Günther
results in G�nther

网页正在使用<meta charset="UTF-8" />

有什么解决办法吗?我无法控制提交系统,因为提交前无法对网址进行编码。

带有特殊字符和 IE 的 url 参数值

所以在 RFC3986 和 RFC2234 之间,我们有以下相关的 URI 规则

pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
                / "*" / "+" / "," / ";" / "="
HEXDIG        =  DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
pct-encoded   = "%" HEXDIG HEXDIG
query         = *( pchar / "/" / "?" )
unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
ALPHA         =  %x41-5A / %x61-7A   ; A-Z / a-z
DIGIT         =  %x30-39 ; 0-9

因此,任何接受未编码字母 ü 的实现都是不符合标准的,任何发出带有此类字符的请求的用户代理也是不合规的。听起来你知道是这种情况。

IMO,这是一个危险的游戏,使您自己的系统更宽容地修补"失控"系统的故障。您确定此请求的颁发者无法修复其代码吗?