我有一个intraweb应用程序,我使用以下url调用,包含1个参数。
http://127.0.0.1:8888/?0001=„V‡&
当我在IE11中输入网址时,它会转换为以下内容。
http://127.0.0.1:8888/$/?0001=%EF%BF%BD%EF%BF%BDV%EF%BF%BD
它适用于Chrome和Opera,它将参数的原始形式传递给应用程序。任何想法如何阻止IE11转换参数?
我使用IE11,Delphi 10.1 Berlin和Intraweb 14.0.53。
问候,彼得
答案 0 :(得分:1)
根据这篇文章,编码查询字符串似乎是唯一的答案。
答案 1 :(得分:1)
„
和‡
等非ASCII字符不允许在网址中按照RFC 3986(通过RFC 3987允许的IRI)进行解码。 HTTP不使用IRI)。某些ASCII字符也保留为分隔符,用于字符数据时不得出现未编码。
IE正在做正确的事情。在传输URL之前,受限字符必须是charset编码为字节(IE使用UTF-8,URL无法指定所使用的字符集),然后字节必须在%HH
中进行百分比编码格式。
Web服务器应该反转此过程以获取原始字符 - 将%HH
序列转换为字节,然后将字节charset-解码为字符。浏览器和Web服务器必须就使用的字符集达成一致。通常使用UTF-8,但并非总是如此。一些外国服务器可能会使用自己的语言环境。
这是URL和HTTP规范的一部分。所有Web服务器都需要识别和解码百分比编码序列。
Chrome和Opera应该在IE正在做的网络层做同样的事情,即使他们没有更新他们的UI来反映它。您可以使用数据包嗅探器(如Wirkshark或Fiddler)来确切验证每个浏览器实际传输到Web服务器的内容。