业务逻辑中遇到了一个棘手的问题,比如你写了一个接口给客户用,客户可能就会有 Unicode 域名
前端: 用户自行填写自己的中文域名:"拼夕夕.中国"
后端: 客户中文域名网站发起了接口请求,到达了我方的服务器,此时是 Punycode: "xn--6rsa717e.xn--fiqs8s"
问题出现了,你总要进行至少一种转换:Unicode 转 Punycode 或者 Punycode 转 Unicode 。
系统存 Punycode:
肉眼十分不友好,看多了会瞎。前端回显时至少要进行一次转回 Unicode 。
系统存 Unicode:
人类友好,机器不友好,每个请求都要将 url 中的 Punycode 至少转一次 Unicode (如果是老系统,估计是要重构)。
存两份格式 or 拒绝 Unicode 域名?
没有此选项。
1
xiangyuecn OP 仔细衡量了一下,可能系统存 Punycode 的成本最低,就是反人类就是了。客户填写也必须填写 Punycode 形式域名。
然后就出现了,域名列表里面一堆 asdfasdfas 毫无规则的域名列表,要眼瞎😃 不过这样后端无需任何处理,省事 |
2
lhx2008 2020-07-19 23:48:57 +08:00 1
接口支持传 punycode 和中文,数据库存 punycode,前端显示 punycode 和 中文
|
3
baobao1270 2020-07-20 03:06:33 +08:00 1
当然是存 Punycode 啦
|
4
ochatokori 2020-07-20 03:15:53 +08:00 via Android 1
存 punvcode
一般又不会直接看数据库 输出给人看的时候再转 unicode 呗 |
5
shiny 2020-07-20 03:25:19 +08:00 1
参考浏览器地址栏:显示的时候显示文字,实际储存 Punycode
|
6
raptium 2020-07-20 10:03:51 +08:00 1
我觉得 URL 里其它位置的中文和域名里有中文情况一样啊。
Path 或者 Query String 里有中文,浏览器地址栏可能显示中文,然而储存一般还是存成 urlencode 之后的形式。 至于说看多了会瞎?我觉得也没差。一般人应该也不可能人脑 decode `%E4%B8%AD%E5%9B%BD` 之类的,反正都是人看不懂的,不能说 `%E4%B8%AD%E5%9B%BD` 看着不瞎, `.xn--fiqs8s` 看着就瞎吧? |
7
unicloud 2020-07-20 12:01:16 +08:00 2
我没有和中文域名的请求打过交道,但是,如果是我选择的话,会使用系统存 Punycode,这是 Raw Data,后续怎么处理,怎么显示,都会基于这个 Punycode 来转换。
Punycode 主要是为了处理国际化域名( Internationalized Domain Names )而制定的,当然不限于中文。这里有一篇关于 Punycode 的简单介绍: https://www.dute.org/punycode 可以看看 |
8
woomly 2020-07-20 13:40:48 +08:00
当然是系统存 Punycode 了
|