URL缩短:最佳编码方法?

mak*_*eee 12 php base64 encoding url-shortener

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

我还需要允许用户创建自定义网址名称,例如http://mysite.com/music

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

当有人创建新链接时:

  • 我从数据库中获取最大的链接ID(它不是自动递增的)
  • 将ID增加1
  • 通过base64_encoding该ID 生成一个简短的URL代码(http://website.com/ [ short url name])
  • 插入链接表:id,short_url_code,destination_url

当有人创建新链接并传递自定义短网址时:

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

有没有更好的编码方法,可以让我把任何数量成短字符串,任何字符串转换成一个数字,这样我就可以随时查找短网址(无论是定制还是自动生成的)转动名字变成一个号码,查询链接ID等于那个数字?

vla*_*adr 11

首先,确保IDshort_url_code列上存在unicity约束.

当有人创建新链接时:

  1. ID从数据库中获取下一个最大的链接(出于性能原因,您应该真正使用它,autoincrement或者SEQUENCE取决于您的RDBMS提供的内容;否则请继续选择MAX(ID)+1)
  2. 使用或任何其他自定义或标准编码方案生成短URL代码(http://website.com/[short url name])IDbase64_encode
  3. 插入links表格:ID, short_url_code, destination_url
  4. 如果插入因违反约束而失败,请返回步骤1尝试新的ID; 你可能有违规行为,因为:

    1. 同一ID已经被使用(即插入)并行的另一个线程/进程等(这会不会,如果你使用的发生autoincrementSEQUENCE,而且经常否则可能发生),和/或
    2. 相同的short_url_code已被用作自定义URL(除非有人试图在您的网站上造成麻烦,否则这种情况很少发生)
  5. 如果插入成功,则提交并将短URL返回给用户

当有人创建新链接并传递自定义短网址时:

  1. 执行与上面相同的步骤1
  2. 而不是ID上面的步骤2 中生成短URL部分,而是使用short_url_code用户提供的自定义
  3. 执行与上述相同的步骤3
  4. 如果插入因以下原因失败:
    1. 违反约束ID:返回步骤1尝试新的ID
    2. 违反约束short_url_code:向用户返回错误,要求他选择不同的自定义URL,因为他/她提供的短网址已被使用
  5. 执行与上述相同的步骤5