V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
wico77
V2EX  ›  问与答

如何将任意 url 转换成 10-12 个字符串

  •  
  •   wico77 · May 10, 2016 · 3900 views
    This topic created in 3641 days ago, the information mentioned may be changed or developed.

    使用 python 或者 nodejs 都可以。

    32 replies    2016-05-11 11:26:33 +08:00
    congeec
        1
    congeec  
       May 10, 2016
    你只能考虑短链接
    Bryan0Z
        2
    Bryan0Z  
       May 10, 2016 via Android
    ASCII 当成 unicode 显示,字符数应该可以减到以前的 1/3 ,然后再压缩下,够呛
    短链接更适合你
    chairuosen
        3
    chairuosen  
       May 10, 2016
    如果你掌握了这个方法,那么你可以把任意数据拼到 url 里,然后用这个方法转换成 10-12 个字符。无限压缩率?
    murmur
        4
    murmur  
       May 10, 2016
    你晓得合法的 url 最长有多长么?压缩到 10-12 ? 100-120 都很了不起了
    Slienc7
        5
    Slienc7  
       May 10, 2016 via Android
    md5 + substr
    lululau
        6
    lululau  
       May 10, 2016
    @murmur 你告诉我合法的 URL 是多长吧,哪部法律?
    Pastsong
        7
    Pastsong  
       May 10, 2016
    @lululau https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.2.1

    > Note: Servers ought to be cautious about depending on URI lengths
    above 255 bytes, because some older client or proxy
    implementations might not properly support these lengths.
    upczww
        8
    upczww  
       May 10, 2016 via Smartisan T1
    找个短链接 api 吧,渣浪的就挺好
    lululau
        9
    lululau  
       May 11, 2016 via iPhone
    @Pastsong 这句话能说明 256 个字节的 URI 就是不合法的了?
    wico77
        10
    wico77  
    OP
       May 11, 2016
    一个字符有 a-zA-Z0-9, 62 个变化, 62 的 12 次方足够应对现有的互联网的网页 url 了吧
    @Slienc7 md5+substr ,这种方法不可逆呀。
    wico77
        11
    wico77  
    OP
       May 11, 2016
    @congeec 话说短链接是怎么缩小到 10 几个字符的呢
    ligyxy
        12
    ligyxy  
       May 11, 2016
    @wico77 你想要可逆?确定?
    tSQghkfhTtQt9mtd
        13
    tSQghkfhTtQt9mtd  
       May 11, 2016 via Android
    @wico77 访问短链接->短链接服务查询对应长链接(你自己写进去的)-> 301/302 Moved
    lslqtz
        14
    lslqtz  
       May 11, 2016 via iPhone
    @Slienc7 我第一个也是想到这个。
    lslqtz
        15
    lslqtz  
       May 11, 2016 via iPhone
    md5+substr 将 substr 后的放到数据库 url 也放进数据库 ruok
    wico77
        16
    wico77  
    OP
       May 11, 2016
    @lslqtz 好方法。
    ob
        17
    ob  
       May 11, 2016 via Android
    @lslqtz 你这方法有点把问题复杂化了,如果单纯只是转 10 个字符串,既然用到本地数据库,为什么不直接弄张对应表,一个 url ,一个自增长的 id ,前面需要的话可以补零。当然多台台服务器同步的另说。
    congeec
        18
    congeec  
       May 11, 2016
    @wico77 哈希呗,然后把哈希后的字符串和原始 URL 用键值对保存起来
    murmur
        19
    murmur  
       May 11, 2016
    @lululau IE 是 2083 所以你单纯用 url 做映射索引效率低死 肯定有一次 hash 再比较 url
    Busy
        20
    Busy  
       May 11, 2016   ❤️ 1
    楼上有人将 url uri 搞混了
    loading
        21
    loading  
       May 11, 2016 via Android
    数据库,一列是原来的 url ,一列是缩短的。
    这样楼主应该明白了,并不是压缩。,只是映射关系。
    heaton_nobu
        22
    heaton_nobu  
       May 11, 2016
    UrlRewrite ,要是自己写就存一份对应关系,不自己写就调用外部 api
    Lucius
        23
    Lucius  
       May 11, 2016
    如果你们讨论出了方案 请告诉我。。
    我想参考你们的方案 设计出把“任意蓝光电影转换成 10-12 个字符串”的算法。 然后去申请诺贝尔物理学奖
    yemoluo
        24
    yemoluo  
       May 11, 2016
    用自增的话建议 base36[0-9a-z]自家用,基本上足够,然后要保存三元组(id,md5_hash,raw_url)
    dapang1221
        25
    dapang1221  
       May 11, 2016
    @Lucius 看来必须要在开个诺贝尔魔法学奖了 2333
    soland
        26
    soland  
       May 11, 2016
    255 字节
    Thoxvi
        27
    Thoxvi  
       May 11, 2016 via Android
    数据库索引?
    dixyes
        28
    dixyes  
       May 11, 2016 via Android
    我萌人类拍了多少部蓝光电影啊
    假定有 1000w 部=1E7 部 吧
    12 位 ascii 码有 7.92281625E28 组合 可行 可打印字符的话有 4.75920314E23 组合 似乎也可行((
    可以假定有一种算法可以实现 4.76E23 个数到 1E7 的映射 只不过这个算法做出来目测可能比 1E7 部电影还大
    dixyes
        29
    dixyes  
       May 11, 2016 via Android
    今年的诺贝尔扯淡学奖是我的了
    lincanbin
        30
    lincanbin  
       May 11, 2016
    你需要一个数据库。
    lincanbin
        31
    lincanbin  
       May 11, 2016
    但是这样也不会是任意 URL ,如果你用大小写字母加数字的话,也就最多映射(26*2+10)^10 个 URL 为 10 位以下的字符。
    lslqtz
        32
    lslqtz  
       May 11, 2016
    @ob 是复杂化了,但是我是直接想我能想到的最简单的方式来的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3109 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 99ms · UTC 14:19 · PVG 22:19 · LAX 07:19 · JFK 10:19
    ♥ Do have faith in what you're doing.