随着微博的快速发展,微博用户数量呈爆炸式增长,微博用户间的信息传播、信息分享较之传统的网络形式进一步加速,所分享的内容也呈多样化趋势,使得短链接服务活跃起来。因为微博内容一般都有字数限制,较长的URL 地址会挤压正文的空间。
而短链接生成器正好解决了这种问题,借助短链接生成器可以用简短的网址替代原来冗长的网址,给用户留下更多的正文空间。
1、短链接的实现原理
短链接主要是通过域名重定向技术,将长网址通过一定的算法转换成一个短链接。当用户访问这个短链接时就可以直接跳转到较长的 U R L 地址上。域名重定向技术也可以称为U R L 转发技术,它是通过网站服务器或者 W eb 应用程序的设置,将访问当前域名的用户引导至指定的另一个 URL 地址。
短链接生成器通常使用的是 301、302 或者 META 转向:
1)301、302 转向
使用 php 中的 header() 函数可以实现 301重定向(永久性转移)或 302 重定向(暂时性转移)。
当客户端访问短链接的 php 页面时,服务器端使用header() 函数向客户端发送原始的 H TTP 报头,在 H TTP 数据头中的Location段中给出相应的长地址。
header函数说明见表
header函数
例:header('Location: http://mrw.so /',true ,301)。表示向客户端浏览器发送命令,强制 H TTP 响应代码为 301,并将该报头替换之前的报头,将重定位地址设为 http://980.so /。

2)META 刷新转向
利用 H TM L 标记 M E TA 中的 R E FR E SH,设定相应的跳转地址,在特定时间后重定向到新的网页 。例 :H TTP-EQ U IV="R E FR E SH " CO N TEN T="5; U R L=index.asp">。在等待 5 秒后,网页将通过刷新的办法重定位到index.asp 的网页。
2、短链接网站的快速搭建
目前互联网上许多个人短链接服务都使用 php 的转向方式,互联网也有许多完整的 php 源码网站,方便个人搭建自己的短链接网站。Phurl是网上较为流行的短链接网站源码,其通过 PH P 和 M ySQ L 实现网址缩短服务,程序仅19K B,包括建库脚本和后台程序。Phurl的搭建极为简单,如下所示 :
1) 在支持 PH P 的服务器中,将 Phurl网站文件放到需要建立网站的目录下。
2) 在 M ySQL 中新建一个数据库。
3) 通过导入 phurl.sql文件,建立所需的数据表 phurl_settings和 phurl_urls。
4) 根据自身需求,修改config.php文件内的配置信息。
5) 进行测试,通过访问 index.php,可以对长网址进行缩短处理,短链接则通过 redirect.php 的处理转向长网址所在的网页。
3、短链接服务的转换算法
Phurl的转换算法就是将短码和长网址在本地数据库建立一一对应的关系。用户访问短链接时,后台通过查找到对应的长网址,通知客户端,客户端进行页面转向操作。
phurl_urls的数据表中存放了id,url,code,alias,date_added;phurl_settings的数据表中仅存放 last_num ber。id 是自增长的主键,url是长网址,code是短码,alias是别名,date_added是记录添加时间,last_num ber是最后一条记录的整数。
算法实现主要函数如表
算法实现主要函数
为了尽可能缩短短链接的字符串长度,Phurl采用了更高进制的表示规则。短码 code 就是是通过函数 generate_code($num ber)产生的高进制数。函数源码如下:
function generate_code($num ber)
{
$out = "";
$codes = "abcdefghjkm npqrstuvwxyz23456789ABCDEFGH JK
M NPQRSTUVW XYZ";
while ($num ber > 53)
{
$key = $num ber % 54;
$num ber = floor($num ber / 54) - 1;
$out = $codes{$key}.$out;
}
return $codes{$num ber}.$out;
}
函数中自定义了数字和大小写的字母组成的 54 位字符串,从前至后每个字符代表为 54 进制中 0-53。如果用上面的 54进制表示,则 4 个字符长的短码则可以表达 850万多条记录,6 个字符长的短码则可以表达 247 亿多条记录。