灵魂拷问:假如你用了中文域名,那么你系统里面是以 Punycode 为准,还是中文为准?

2020-07-19 23:17:30 +08:00
 xiangyuecn

业务逻辑中遇到了一个棘手的问题,比如你写了一个接口给客户用,客户可能就会有 Unicode 域名

前端: 用户自行填写自己的中文域名:"拼夕夕.中国"

后端: 客户中文域名网站发起了接口请求,到达了我方的服务器,此时是 Punycode: "xn--6rsa717e.xn--fiqs8s"

问题出现了,你总要进行至少一种转换:Unicode 转 Punycode 或者 Punycode 转 Unicode 。


系统存 Punycode:

肉眼十分不友好,看多了会瞎。前端回显时至少要进行一次转回 Unicode 。


系统存 Unicode:

人类友好,机器不友好,每个请求都要将 url 中的 Punycode 至少转一次 Unicode (如果是老系统,估计是要重构)。


存两份格式 or 拒绝 Unicode 域名?

没有此选项。


那么,有用过中文域名什么的的老哥吗,你们系统里面怎么处理这种麻烦事?

2516 次点击
所在节点    程序员
8 条回复
xiangyuecn
2020-07-19 23:27:49 +08:00
仔细衡量了一下,可能系统存 Punycode 的成本最低,就是反人类就是了。客户填写也必须填写 Punycode 形式域名。

然后就出现了,域名列表里面一堆 asdfasdfas 毫无规则的域名列表,要眼瞎😃 不过这样后端无需任何处理,省事
lhx2008
2020-07-19 23:48:57 +08:00
接口支持传 punycode 和中文,数据库存 punycode,前端显示 punycode 和 中文
baobao1270
2020-07-20 03:06:33 +08:00
当然是存 Punycode 啦
ochatokori
2020-07-20 03:15:53 +08:00
存 punvcode
一般又不会直接看数据库
输出给人看的时候再转 unicode 呗
shiny
2020-07-20 03:25:19 +08:00
参考浏览器地址栏:显示的时候显示文字,实际储存 Punycode
raptium
2020-07-20 10:03:51 +08:00
我觉得 URL 里其它位置的中文和域名里有中文情况一样啊。

Path 或者 Query String 里有中文,浏览器地址栏可能显示中文,然而储存一般还是存成 urlencode 之后的形式。

至于说看多了会瞎?我觉得也没差。一般人应该也不可能人脑 decode `%E4%B8%AD%E5%9B%BD` 之类的,反正都是人看不懂的,不能说 `%E4%B8%AD%E5%9B%BD` 看着不瞎, `.xn--fiqs8s` 看着就瞎吧?
unicloud
2020-07-20 12:01:16 +08:00
我没有和中文域名的请求打过交道,但是,如果是我选择的话,会使用系统存 Punycode,这是 Raw Data,后续怎么处理,怎么显示,都会基于这个 Punycode 来转换。
Punycode 主要是为了处理国际化域名( Internationalized Domain Names )而制定的,当然不限于中文。这里有一篇关于 Punycode 的简单介绍: https://www.dute.org/punycode 可以看看
woomly
2020-07-20 13:40:48 +08:00
当然是系统存 Punycode 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/691415

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX