Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何强制浏览器不规范unicode URL?_Javascript_Url_Browser_Unicode - Fatal编程技术网

Javascript 如何强制浏览器不规范unicode URL?

Javascript 如何强制浏览器不规范unicode URL?,javascript,url,browser,unicode,Javascript,Url,Browser,Unicode,大多数浏览器,如Firefox和Chrome,在请求URL之前都会对URL进行Unicode规范化。例如,当chrome或firefox想要打开此链接时: http://fa.wikipedia.org/wiki/س 其中包含波斯语Unicode字符,它们会自动将此字符串转换为: http://fa.wikipedia.org/wiki/%D8%B3%DB%8C%D8%AF_%D9%85%D8%AD%D9%85%D8%AF_%D8%AE%D8%A7%D8%AA%D9%85%DB%8C 我想修改我

大多数浏览器,如Firefox和Chrome,在请求URL之前都会对URL进行Unicode规范化。例如,当chrome或firefox想要打开此链接时:

http://fa.wikipedia.org/wiki/س

其中包含波斯语Unicode字符,它们会自动将此字符串转换为:

http://fa.wikipedia.org/wiki/%D8%B3%DB%8C%D8%AF_%D9%85%D8%AD%D9%85%D8%AF_%D8%AE%D8%A7%D8%AA%D9%85%DB%8C

我想修改我网站中的超链接,以防止浏览器规范化unicode字符,这样当用户单击链接时,服务器会请求其纯(原始)URL

有什么诀窍吗?例如,源页面中链接到此类URL的小javascript代码


更新:当我通过编程语言请求url时,例如Java的
HttpURLConnection
,它请求原始url,并且不使用任何规范化(除非我显式调用
UrlNormalizer.normalize(url)
)。然而,大多数浏览器和Linux的GET命令都进行了规范化

例如,当chrome或firefox想要打开此链接时:

这不是一个有效的URI。这是一个很好的例子。支持IRI的Web浏览器和其他客户端工具将在幕后为您将其转换为仅ASCII的URI形式(百分比UTF-8编码路径和Punycode编码主机名)


当我通过编程语言(例如Java的HttpURLConnection)请求url时,它会请求原始url

HttpURLConnection不支持IRI。无论如何,它都会尝试按原样发送URI,但它确实应该因为URI无效而拒绝它

我想修改我网站中的超链接,以防止浏览器规范化unicode字符,这样当用户单击链接时,服务器会请求其纯(原始)URL

根据HTTP标准,在请求行(RFC7230绝对路径->RFC3986段)中发送原始非ASCII字节无效。当出现这种无效请求时,Web服务器会执行不同的、不可预测的操作。任何时候都最好避免这种情况


没有办法告诉支持IRI的浏览器忽略正确的行为并发送非ASCII请求行,但为什么要这样做呢?您想在这里做什么?

HTTP协议允许这样做吗?我假设这是后端的东西虽然支持UTF-8,但它们必须使用百分比编码在线路上进行编码。这正是您的浏览器所做的。当我通过编程语言(例如Java的HttpURLConnection)请求url时,它请求原始url,并且不使用任何规范化(除非我显式地调用UrlNormalizer.normalize(url))。然而,大多数浏览器和Linux的GET命令都进行了规范化。显然,这不是后端的问题。不过,有些浏览器允许这样做。