<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>I@laoer.com &#187; Short Url</title>
	<atom:link href="http://i.laoer.com/tag/short-url/feed" rel="self" type="application/rss+xml" />
	<link>http://i.laoer.com</link>
	<description>技术、生活、感悟 -- Laoer的博客</description>
	<lastBuildDate>Mon, 30 Jan 2012 10:03:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Short Url（短网址）实现方式</title>
		<link>http://i.laoer.com/short-url.html</link>
		<comments>http://i.laoer.com/short-url.html#comments</comments>
		<pubDate>Mon, 27 Apr 2009 06:18:43 +0000</pubDate>
		<dc:creator>Laoer</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web2.0]]></category>
		<category><![CDATA[Short Url]]></category>

		<guid isPermaLink="false">http://i.laoer.com/?p=306</guid>
		<description><![CDATA[现在提供Short Url(短网址)的网站越来越多了，特别是Twitter的助Short Url的一臂之力，越来越多的人开始使用Short Url-短网址，现在比较流行的几个Short Url网站有 TinyURL http://tinyurl.com/ Bit.Ly http://bit.ly/ Is.Gd http://is.gd/ 等等，Short Url的作用在于把长的Url缩成短的Url，比如，我前两天些的一篇博客，Url是http://i.laoer.com/think-about-http-get-chinese-encode-error.html，我们采用TinyURL，转成的Url是http://tinyurl.com/d4zw8x，只有25个字符，短了很多，请求http://tinyurl.com/d4zw8x的时候，tinyurl会把请求通过HTTP 301转到http://i.laoer.com/think-about-http-get-chinese-encode-error.html上。 实现Short Url的功能并不复杂，但最关键的就是这个短代码要够短，而且需要唯一，我们的例子是“d4zw8x”，6位，还有就是用户输入的同一个Url，应该返回唯一的Short Url，用户在请求长的Url之后，先从数据库查找一下这个长Url是否存在，如果存在，就直接取出其对应的短代码，如果不存在，则生成短代码，与用户的长Url同时保存在数据库中。 最核心的这个短代码的实现方式，我在网上找了两个 第一个是纯随机数的算法，来自Short URL Script 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 function random&#40;$length, $pool = ''&#41; &#123; $random = ''; &#160; if &#40;empty&#40;$pool&#41;&#41; &#123; $pool = 'abcdefghkmnpqrstuvwxyz'; [...]]]></description>
			<content:encoded><![CDATA[<p>现在提供Short Url(短网址)的网站越来越多了，特别是Twitter的助Short Url的一臂之力，越来越多的人开始使用Short Url-短网址，现在比较流行的几个Short Url网站有</p>
<p>TinyURL<br />
<a href="http://tinyurl.com/" target="_blank">http://tinyurl.com/</a></p>
<p>Bit.Ly<br />
<a href="http://bit.ly/" target="_blank">http://bit.ly/</a></p>
<p>Is.Gd<br />
<a href="http://is.gd/" target="_blank">http://is.gd/</a></p>
<p>等等，Short Url的作用在于把长的Url缩成短的Url，比如，我前两天些的一篇博客，Url是http://i.laoer.com/think-about-http-get-chinese-encode-error.html，我们采用TinyURL，转成的Url是http://tinyurl.com/d4zw8x，只有25个字符，短了很多，请求http://tinyurl.com/d4zw8x的时候，tinyurl会把请求通过HTTP 301转到http://i.laoer.com/think-about-http-get-chinese-encode-error.html上。</p>
<p>实现Short Url的功能并不复杂，但最关键的就是这个短代码要够短，而且需要唯一，我们的例子是“d4zw8x”，6位，还有就是用户输入的同一个Url，应该返回唯一的Short Url，用户在请求长的Url之后，先从数据库查找一下这个长Url是否存在，如果存在，就直接取出其对应的短代码，如果不存在，则生成短代码，与用户的长Url同时保存在数据库中。</p>
<p>最核心的这个短代码的实现方式，我在网上找了两个</p>
<p>第一个是纯随机数的算法，来自<a href="http://www.gentlesource.com/" target="_blank">Short URL Script</a></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> random<span style="color: #009900;">&#40;</span><span style="color: #000088;">$length</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pool</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$random</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$pool</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$pool</span>    <span style="color: #339933;">=</span> <span style="color: #0000ff;">'abcdefghkmnpqrstuvwxyz'</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$pool</span>   <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'23456789'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #990000;">srand</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>double<span style="color: #009900;">&#41;</span><span style="color: #990000;">microtime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #cc66cc;">1000000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$length</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> 
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$random</span> <span style="color: #339933;">.=</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$pool</span><span style="color: #339933;">,</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">rand</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">strlen</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$pool</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$random</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>另一个算法来自<a href="http://www.snippetit.com/2009/04/php-short-url-algorithm-implementation/" target="_blank">http://www.snippetit.com/2009/04/php-short-url-algorithm-implementation/</a></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> shorturl<span style="color: #009900;">&#40;</span><span style="color: #000088;">$input</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$base32</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'a'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'b'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'c'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'d'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'e'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'f'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'g'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'h'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'i'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'j'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'k'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'l'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'m'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'n'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'o'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'p'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'q'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'r'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'s'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'t'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'u'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'v'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'w'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'x'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'y'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'z'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'0'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'1'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'2'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'3'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'4'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'5'</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #000088;">$hex</span> <span style="color: #339933;">=</span> <span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$input</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$hexLen</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$hex</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$subHexLen</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$hexLen</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">8</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$output</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$subHexLen</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$subHex</span> <span style="color: #339933;">=</span> <span style="color: #990000;">substr</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$hex</span><span style="color: #339933;">,</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">8</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$int</span> <span style="color: #339933;">=</span> <span style="color: #208080;">0x3FFFFFFF</span> <span style="color: #339933;">&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'0x'</span><span style="color: #339933;">.</span><span style="color: #000088;">$subHex</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$out</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$j</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$j</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">6</span><span style="color: #339933;">;</span> <span style="color: #000088;">$j</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #000088;">$val</span> <span style="color: #339933;">=</span> <span style="color: #208080;">0x0000001F</span> <span style="color: #339933;">&amp;</span> <span style="color: #000088;">$int</span><span style="color: #339933;">;</span>
      <span style="color: #000088;">$out</span> <span style="color: #339933;">.=</span> <span style="color: #000088;">$base32</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$val</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
      <span style="color: #000088;">$int</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$int</span> <span style="color: #339933;">&gt;&gt;</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000088;">$output</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$out</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">return</span> <span style="color: #000088;">$output</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>其返回的是一个4个元素的数组，应为存在可能的重复性，你可以依次使用这4个元素。</p>
<p>Short Url的算法应该还有一些，Short Url网站的作用除了缩短网址以外，在使用者不断增加之后，可以积累庞大的网址信息，这对统计分析是很有用的。</p>
]]></content:encoded>
			<wfw:commentRss>http://i.laoer.com/short-url.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

