首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >网址缩短器:最好的编码方法?

问网址缩短器:最好的编码方法?
EN

Stack Overflow用户
提问于 2010-03-03 23:55:46
回答 2查看 10.4K关注 0票数 13

我正在创建一个链接缩短服务,并且我使用一个增量ID字段的base64编码/解码来创建我的urls。ID为"6“的url为:http://mysite.com/Ng==

我还需要允许用户创建一个自定义url名称,比如http://mysite.com/music。

到目前为止,这是我的(可能是错误的)方法。帮助修复它将不胜感激。

当某人创建一个新链接时:

当某人创建一个新链接并传递自定义的短URL时:

  • 我的计划是base64_decode他们的自定义字符串,并使用它作为链接ID,但我没有意识到,您不能只是base64_decode任何字母数字字符串,并将其转换为一个数字。

是否有更好的编码方法可以让我将任何数字转换为短字符串,将任何字符串转换为数字,以便通过将名称转换为数字并查询ID等于该数字的链接来始终查找短urls (无论是自定义的还是自动生成的)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-04 00:17:13

首先,确保在ID和short_url_code列上都有统一约束()。

当某人创建一个新链接时:

  1. 从数据库中获取下一个最大的链接(出于性能原因,您应该真正使用autoincrement SEQUENCE,或,具体取决于RDBMS提供的内容;否则请继续选择MAX(ID)+1 )
  2. 使用http://website.com/[short url name]或任何其他自定义或标准编码方案从ID生成短URL代码( base64_encode )
  3. 插入links表:ID, short_url_code, destination_url
  4. 如果插入因违反约束而失败,请返回步骤1尝试新的ID;您可能发生了冲突,因为:
代码语言:javascript
复制
1. the same ID has already been used (i.e. inserted) in parallel by another thread/process etc. (this will _not_ happen if you used `autoincrement` or `SEQUENCE`, and may happen quite often otherwise), and/or
2. the same `short_url_code` has already been used as a custom URL (this will happen very seldomly unless someone is trying to cause trouble on your site)

​

  1. 如果插入成功,提交并将短URL返回给用户

当某人创建一个新链接并传递自定义的短URL时:

  1. 执行与上面相同的步骤1
  2. short_url_code不像上面第2步那样从ID生成短URL部分,使用用户提供的自定义
  3. 执行与上面相同的步骤3
  4. 如果插入失败的原因是:
    1. 违反ID的约束:回到步骤1,尝试一个新的ID
    2. short_url_code上的约束冲突:向用户返回一个要求他选择另一个自定义URL的错误,因为他/她提供的短URL已经被使用了

​

  1. 执行与上面相同的步骤5
票数 12
EN

Stack Overflow用户

发布于 2010-03-04 00:27:36

base64可以用来制作短url,但也可以使url更长。例如,数字1的base64_encode是'MQ==‘,是大小的4倍。Base64总是有两个字符来获得64位,这对于短urls来说并不理想。

如果大小是最重要的因素,那么您可能可以通过依赖国际化生成最短的urls。

这可能会使URI相当长(单个Unicode字符最多有9个ASCII字符),但其意图是浏览器只需要显示已解码的表单,而且许多协议可以发送UTF-8而不需要%HH转义。

请记住,浏览器在UTF-8上运行得很好,twitter在这些urls上也不会有问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2375968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档