我正在创建一个链接缩短服务,我正在使用增量ID字段的base64编码/解码来创建我的URL。 ID为“6”的网址为:http://mysite.com/Ng==
我还需要允许用户创建自定义网址名称,例如http://mysite.com/music
到目前为止,这是我的(可能是错误的)方法。帮助修复它将不胜感激。
当有人创建新链接时:
当有人创建新链接并传递自定义短网址时
是否有更好的编码方法可以让我将任何数字转换为短字符串,将任何字符串转换为数字,这样我就可以通过将名称转换为数字并查询来查找短网址(无论是自定义还是自动生成)对于ID等于该号码的链接?
答案 0 :(得分:11)
首先,确保您在ID
和short_url_code
列上确实存在。
当有人创建新链接时:
ID
(出于性能原因,您应该真正使用autoincrement
或SEQUENCE
,具体取决于您的RDBMS提供的内容;否则请选择MAX(ID)+1
)http://website.com/[short url name]
或任何其他自定义或标准编码方案,从ID
生成一个简短的网址代码(base64_encode
)links
表:ID, short_url_code, destination_url
如果插入因违反约束而失败,请返回步骤1尝试新的ID
;你可能有违规行为,因为:
autoincrement
或SEQUENCE
,则不会,并且可能经常发生,否则)和/或short_url_code
已被用作自定义网址(除非有人试图在您的网站上造成问题,否则很少会发生这种情况)如果插入成功,则提交并将短URL返回给用户
当有人创建新链接并传递自定义短网址时
ID
生成短网址部分,使用用户提供的自定义short_url_code
ID
违反约束:返回第1步尝试新的ID
short_url_code
上的约束违规:向用户返回错误,要求他选择其他自定义网址,因为他/她提供的短网址已被使用答案 1 :(得分:2)
base64可用于制作短网址,但也可以使网址更长。例如,数字1的base64_encode是'MQ ==',是大小的4倍。 Base64总是有2个字符来获得64位,这对于短网址来说并不理想。
如果尺寸是最重要的因素,那么您可以依靠internationalization生成最短的网址。
这可以使URI相当长(单个Unicode字符最多9个ASCII字符),但目的是浏览器只需要显示解码后的形式,并且许多协议可以在没有%HH转义的情况下发送UTF-8
请记住,浏览器在使用UTF-8时效果很好,而且这些网址也不会有问题。