V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
xiangyuecn
V2EX  ›  程序员

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

  •  1
     
  •   xiangyuecn ·
    xiangyuecn · 2020-07-19 23:17:30 +08:00 · 2516 次点击
    这是一个创建于 1622 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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


    系统存 Punycode:

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


    系统存 Unicode:

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


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

    没有此选项。


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

    8 条回复    2020-07-20 13:40:48 +08:00
    xiangyuecn
        1
    xiangyuecn  
    OP
       2020-07-19 23:27:49 +08:00
    仔细衡量了一下,可能系统存 Punycode 的成本最低,就是反人类就是了。客户填写也必须填写 Punycode 形式域名。

    然后就出现了,域名列表里面一堆 asdfasdfas 毫无规则的域名列表,要眼瞎😃 不过这样后端无需任何处理,省事
    lhx2008
        2
    lhx2008  
       2020-07-19 23:48:57 +08:00   ❤️ 1
    接口支持传 punycode 和中文,数据库存 punycode,前端显示 punycode 和 中文
    baobao1270
        3
    baobao1270  
       2020-07-20 03:06:33 +08:00   ❤️ 1
    当然是存 Punycode 啦
    ochatokori
        4
    ochatokori  
       2020-07-20 03:15:53 +08:00 via Android   ❤️ 1
    存 punvcode
    一般又不会直接看数据库
    输出给人看的时候再转 unicode 呗
    shiny
        5
    shiny  
       2020-07-20 03:25:19 +08:00   ❤️ 1
    参考浏览器地址栏:显示的时候显示文字,实际储存 Punycode
    raptium
        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` 看着就瞎吧?
    unicloud
        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 可以看看
    woomly
        8
    woomly  
       2020-07-20 13:40:48 +08:00
    当然是系统存 Punycode 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2890 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:09 · PVG 08:09 · LAX 16:09 · JFK 19:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.