URL中的语言特定字符

时间:2018-03-03 18:51:05

标签: url character-encoding

工作中的同事创建了API端点,该端点在url中使用特定于语言的字符。这个api url看起来像

http://somedomain.com/someapi/somemethod/zażółć/gęślą/jaźń

这样做还是不好?

1 个答案:

答案 0 :(得分:0)

从技术上讲,这不是有效的网址,但是网络浏览器和其他客户端会对其进行细致处理。字符所来自的脚本不是问题,而是结构字符,如" /?#"可能。当他们显示您正在粘贴的数据时,您必须考虑该做什么。进入你的网址。

HTTP URL是:

  • ASCII编码方案(在本例中为协议" http")
  • 一个punycode编码的ASCII编码域
  • 路径,可选查询和可选哈希的%编码,ASCII编码,服务器定义的八位字节序列。

请参阅RFC 3986

每个人都做出的假设 - 相当合理,因为它是主要的做法 - 是路径,查询和哈希是文本。没有文字而是编码文本。因此,涉及一些字符编码。如果在结构字符之外需要%-encoding,浏览器将采用UTF-8。如果您不希望浏览器执行%-encoding,请使用您正在使用的字符编码自行执行有效的URL。

由于世界正在标准化UTF-8(如果适用),HTML DOM也具有encodeURIComponent功能。在Web浏览器中使用JavaScript的客户端可能直接或通过某些库使用此功能。

我的浏览器创建的URL的UTF-8编码,%编码(以及然后是有线,ASCII编码)版本:

  

http://somedomain.com/someapi/somemethod/za%C5%BC%C3%B3%C5%82%C4%87/g%C4%99%C5%9Bl%C4%85/ja%C5%BA%C5%84

(您可以使用浏览器的开发工具[F12键,网络标签]或数据包嗅探器[例如,Wireshark或Fiddler]自行查看。您在网上看不到作为URL提供的内容。 )

您的服务器应用程序可能理解这很好。无论如何,这是客户端遵守的服务器规则。如果您的API使用UTF-8编码,%编码的网址,则只记录该文件。 (但是以一种不会让那些已经不知情的人混淆的方式来表达它。)