我正在创建一个链接缩短服务,并且我使用一个增量ID字段的base64编码/解码来创建我的urls。ID为"6“的url为:http://mysite.com/Ng==
我还需要允许用户创建一个自定义url名称,比如http://mysite.com/music。
到目前为止,这是我的(可能是错误的)方法。帮助修复它将不胜感激。
当某人创建一个新链接时:
当某人创建一个新链接并传递自定义的短URL时:
是否有更好的编码方法可以让我将任何数字转换为短字符串,将任何字符串转换为数字,以便通过将名称转换为数字并查询ID等于该数字的链接来始终查找短urls (无论是自定义的还是自动生成的)?
发布于 2010-03-04 00:17:13
首先,确保在ID和short_url_code列上都有统一约束()。
当某人创建一个新链接时:
autoincrement SEQUENCE,或,具体取决于RDBMS提供的内容;否则请继续选择MAX(ID)+1 )http://website.com/[short url name]或任何其他自定义或标准编码方案从ID生成短URL代码( base64_encode )links表:ID, short_url_code, destination_urlID;您可能发生了冲突,因为: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)
当某人创建一个新链接并传递自定义的短URL时:
short_url_code不像上面第2步那样从ID生成短URL部分,使用用户提供的自定义ID的约束:回到步骤1,尝试一个新的IDshort_url_code上的约束冲突:向用户返回一个要求他选择另一个自定义URL的错误,因为他/她提供的短URL已经被使用了
发布于 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上也不会有问题。
https://stackoverflow.com/questions/2375968
复制相似问题