微博长URL转短URL的方法

178 篇文章 0 订阅

一、前台判断用户输入URL的JS代码如下。

[javascript]  view plain copy
  1. function CheckInput() {  
  2.     var $txtLength = $("#inp_text").val().length;  
  3.     if ($txtLength > 10) {  
  4.         var url = $("#inp_text").val();  
  5.         var xx = url.match(RegExp("((news|telnet|nttp|file|http|ftp|https)://){1}(([-A-Za-z0-9]+(\\.[-A-Za-z0-9]+)*(\\.[-A-Za-z]{2,5}))|([0-9]{1,3}(\\.[0-9]{1,3}){3}))(:[0-9]*)?(/[-A-Za-z0-9_\\$\\.\\+\\!\\*\\(\\),;:@&=\\?/~\\#\\%]*)*""gi") || []);  
  6.         if (xx != null) {  
  7.             for (var i = 0; i < xx.length; i++) {  
  8.                 var $txtLength = $("#inp_text").val().length;  
  9.                 $txtLength = $txtLength - xx[i].length + 11;  
  10.             }  
  11.         }  
  12.     }  
  13.     if ($txtLength < 141) {  
  14.         $("#div_txtlength").html("还能输入<span>" + (140 - $txtLength) + "</span>个字");  
  15.     }  
  16.     else {  
  17.         $("#div_txtlength").html("超出<span>" + ($txtLength - 140) + "</span>个字");  
  18.     }  
  19.   
  20. }  
  21.   
  22. function InsertText() {  
  23.     if ($("#inp_text").val().Trim().length == 0) {  
  24.         art.dialog({  
  25.             title: '错误',  
  26.             icon: 'error',  
  27.             content: '请输入内容',  
  28.             width: "150px",  
  29.             height: "80px",  
  30.             lock: true  
  31.         });  
  32.         return;  
  33.     }  
  34.     //长url转换成短url  
  35.     var url = $("#inp_text").val();  
  36.     var xx = url.match(RegExp("((news|telnet|nttp|file|http|ftp|https)://){1}(([-A-Za-z0-9]+(\\.[-A-Za-z0-9]+)*(\\.[-A-Za-z]{2,5}))|([0-9]{1,3}(\\.[0-9]{1,3}){3}))(:[0-9]*)?(/[-A-Za-z0-9_\\$\\.\\+\\!\\*\\(\\),;:@&=\\?/~\\#\\%]*)*""gi") || []);  
  37.     var $txtLength = $("#inp_text").val().length;  
  38.     if (xx != null) {  
  39.         for (var i = 0; i < xx.length; i++) {  
  40.             $txtLength = $txtLength - xx[i].length + 11;  
  41.         }  
  42.     }  
  43.     if ($txtLength < 141) {  
  44.         $("#div_txtlength").html("还能输入<span>" + (140 - $txtLength) + "</span>个字");  
  45.     }  
  46.     else {  
  47.         $("#div_txtlength").html("超出<span>" + ($txtLength - 140) + "</span>个字");  
  48.     }  
  49.     if ($txtLength > 140) {  
  50.         art.dialog({  
  51.             title: '错误',  
  52.             icon: 'error',  
  53.             content: '字数超出限制',  
  54.             width: "150px",  
  55.             height: "80px",  
  56.             lock: true  
  57.         });  
  58.         return false;  
  59.     }  
  60.     $.ajax({  
  61.         type: "POST",  
  62.         url: "../MiniBlog/Handler.ashx",  
  63.         data: { "txt": $("#inp_text").val() },  
  64.         datatype: "html",  
  65.         beforeSend: function () { $("#div_txtlength").html("正在提交。。。"); },  
  66.         success: function (data) {  
  67.             if (data.length > 1) {  
  68.                 window.location.reload();  
  69.             }  
  70.             else {  
  71.                 art.dialog({  
  72.                     title: '错误',  
  73.                     icon: 'error',  
  74.                     content: '发布失败,请复制内容后刷新当前页面。',  
  75.                     width: "150px",  
  76.                     height: "80px",  
  77.                     lock: true  
  78.                 });  
  79.             }  
  80.         },  
  81.         complete: function (XMLHttpRequest, textStatus) {  
  82.             //                    alert(XMLHttpRequest.responseText);  
  83.             //                    alert(textStatus);  
  84.         },  
  85.         error: function () {  
  86.         }  
  87.     });  
  88. }  


二、前台ASPX的代码如下(部分)

[html]  view plain copy
  1. <div class="title_left">  
  2.                     有什么新鲜事和大家分享?</div>  
  3.                 <div class="left_box">  
  4.                     <textarea class="textarea01" id="inp_text" onblur="CheckInput()" onkeyup="CheckInput()"></textarea></div>  
  5.                 <div class="left_box">  
  6.                     <div class="insert" style="visibility: hidden">  
  7.                         <ul>  
  8.                             <li style="background: url(../images/weibo/icon.jpg) no-repeat -172px 0px;"><a href="#">  
  9.                                 表情</a></li>  
  10.                             <li style="background: url(../images/weibo/icon.jpg) no-repeat -115px 0px;"><a href="#">  
  11.                                 图片</a></li>  
  12.                             <li style="background: url(../images/weibo/icon.jpg) no-repeat -229px 0px;"><a href="#">  
  13.                                 音乐</a></li>  
  14.                         </ul>  
  15.                     </div>  
  16.                     <div class="Prompt" id="div_txtlength">  
  17.                         还能输入<span>140</span></div>  
  18.                     <div class="bottom_gb">  
  19.                         <a href="javascript:void(0)" onclick="InsertText();" class="link1"></a>  
  20.                     </div>  
  21.                 </div>  

三、以上是用来判断用户输入内容里面是否含有网址,下面是后台提交到数据库的时候进行的转换

[csharp]  view plain copy
  1. #region 长url转短url  
  2.        Regex rx = new Regex("((news|telnet|nttp|file|http|ftp|https)://){1}(([-A-Za-z0-9]+(\\.[-A-Za-z0-9]+)*(\\.[-A-Za-z]{2,5}))|([0-9]{1,3}(\\.[0-9]{1,3}){3}))(:[0-9]*)?(/[-A-Za-z0-9_\\$\\.\\+\\!\\*\\(\\),;:@&=\\?/~\\#\\%]*)*", RegexOptions.IgnoreCase);  
  3.        string txt_context = context.Request.Form["txt"].ToString();  
  4.        MatchCollection mc = rx.Matches(txt_context);  
  5.        if (mc.Count > 0)  
  6.        {  
  7.            for (int i = 0; i < mc.Count; i++)  
  8.            {  
  9.                Haedu.Gxt.Model.MINIBLOGURL_Model M_url = new Haedu.Gxt.Model.MINIBLOGURL_Model();  
  10.                Haedu.Gxt.Bll.MINIBLOGURL B_url = new Haedu.Gxt.Bll.MINIBLOGURL();  
  11.   
  12.                M_url.BACKUP1 = Common.md5(mc[i].Value);  
  13.                M_url.BACKUP2 = " ";  
  14.                M_url.CREATETIME = DateTime.Now;  
  15.                M_url.CREATEUSER = User_BaseInfo.GetUserID;  
  16.                M_url.ID = Common.GetGUID;  
  17.                M_url.STATE = 0;  
  18.                M_url.SURL = mc[0].Value;  
  19.                M_url.TURL = MiniBlog.ShortUrl(mc[i].Value);  
  20.                txt_context = txt_context.Replace(mc[i].Value, M_url.TURL);  
  21.                  
  22.                if(!B_url.Exists(M_url.BACKUP1))  
  23.                {  
  24.                    B_url.Add(M_url);  
  25.                }  
  26.            }  
  27.        }  
  28.        
  29.        #endregion  
  30.        #region 写入微博数据库  
  31.      --写入微博数据库的代码  
  32.     #endregion  

四、MiniBlog.ShortUrl方法代码

[csharp]  view plain copy
  1. #region 长转短url  
  2.     /// <summary>  
  3.     /// 长url转短url  
  4.     /// </summary>  
  5.     /// <param name="url">原url</param>  
  6.     /// <returns>返回短url</returns>  
  7.     public static string ShortUrl(string url)  
  8.     {  
  9.         //可以自定义生成MD5加密字符传前的混合KEY  
  10.         string key = "Haedu_MiniBlog";  
  11.         //要使用生成URL的字符  
  12.         string[] chars = new string[]{  
  13.                 "a","b","c","d","e","f","g","h",  
  14.                 "i","j","k","l","m","n","o","p",  
  15.                 "q","r","s","t","u","v","w","x",  
  16.                 "y","z","0","1","2","3","4","5",  
  17.                 "6","7","8","9","A","B","C","D",  
  18.                 "E","F","G","H","I","J","K","L",  
  19.                 "M","N","O","P","Q","R","S","T",  
  20.                 "U","V","W","X","Y","Z"};  
  21.         //对传入网址进行MD5加密  
  22.         string hex = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(key + url, "md5");  
  23.         string[] resUrl = new string[4];  
  24.         for (int i = 0; i < 4; i++)  
  25.         {  
  26.             //把加密字符按照8位一组16进制与0x3FFFFFFF进行位与运算  
  27.             int hexint = 0x3FFFFFFF & Convert.ToInt32("0x" + hex.Substring(i * 8, 8), 16);  
  28.             string outChars = string.Empty;  
  29.             for (int j = 0; j < 6; j++)  
  30.             {  
  31.                 //把得到的值与0x0000003D进行位与运算,取得字符数组chars索引  
  32.                 int index = 0x0000003D & hexint;  
  33.                 //把取得的字符相加  
  34.                 outChars += chars[index];  
  35.                 //每次循环按位右移5位  
  36.                 hexint = hexint >> 5;  
  37.             }  
  38.             //把字符串存入对应索引的输出数组  
  39.             resUrl[i] = outChars;  
  40.         }  
  41.         return "http://url.cn/" + resUrl[(new Random()).Next(0, 3)];  
  42.     }  
  43.     #endregion  


五、短URL转换成原始URL

[csharp]  view plain copy
  1. #region 短url替换成原始url  
  2.     public static string CheckUrl(string context)  
  3.     {  
  4.         Regex rx = new Regex("((news|telnet|nttp|file|http|ftp|https)://){1}(([-A-Za-z0-9]+(\\.[-A-Za-z0-9]+)*(\\.[-A-Za-z]{2,5}))|([0-9]{1,3}(\\.[0-9]{1,3}){3}))(:[0-9]*)?(/[-A-Za-z0-9_\\$\\.\\+\\!\\*\\(\\),;:@&=\\?/~\\#\\%]*)*", RegexOptions.IgnoreCase);  
  5.         MatchCollection mc = rx.Matches(context);  
  6.         if (mc.Count > 0)  
  7.         {  
  8.             for (int i = 0; i < mc.Count; i++)  
  9.             {  
  10.                 Haedu.Gxt.Model.MINIBLOGURL_Model M_url = new Haedu.Gxt.Model.MINIBLOGURL_Model();  
  11.                 Haedu.Gxt.Bll.MINIBLOGURL B_url = new Haedu.Gxt.Bll.MINIBLOGURL();  
  12.                 M_url = B_url.GetModel(mc[i].Value);  
  13.                 if (M_url != null)  
  14.                 {  
  15.                     if (int.Parse(M_url.STATE.ToString()) == 2)  
  16.                     {  
  17.                         context = context.Replace(mc[i].Value, "链接已经被屏蔽");  
  18.                     }  
  19.                     else  
  20.                     {  
  21.                         context = context.Replace(mc[i].Value, "<a href=\"" + M_url.SURL + "\" target=\"_blank\" title=\"" + M_url.SURL + "\" >" + mc[i].Value + "</a>");  
  22.                     }  
  23.                 }  
  24.             }  
  25.         }  
  26.         return context;  
  27.     }  
  28.     #endregion  


六、数据库结构(oracle)

[sql]  view plain copy
  1. -- Create table  
  2. create table MINIBLOGURL  
  3. (  
  4.   id         VARCHAR2(50) not null,  
  5.   surl       VARCHAR2(200) not null,  
  6.   turl       VARCHAR2(100) not null,  
  7.   createtime DATE not null,  
  8.   createuser VARCHAR2(50) not null,  
  9.   state      NUMBER(1) not null,  
  10.   backup1    VARCHAR2(200) not null,  
  11.   backup2    VARCHAR2(200) not null  
  12. )  
  13. tablespace TAB_GXT  
  14.   pctfree 10  
  15.   initrans 1  
  16.   maxtrans 255  
  17.   storage  
  18.   (  
  19.     initial 64K  
  20.     next 8K  
  21.     minextents 1  
  22.     maxextents unlimited  
  23.   );  
  24. -- Add comments to the columns   
  25. comment on column MINIBLOGURL.id  
  26.   is '逻辑ID';  
  27. comment on column MINIBLOGURL.surl  
  28.   is '原始url';  
  29. comment on column MINIBLOGURL.turl  
  30.   is '转成的短url';  
  31. comment on column MINIBLOGURL.createtime  
  32.   is '创建时间';  
  33. comment on column MINIBLOGURL.createuser  
  34.   is '创建人ID';  
  35. comment on column MINIBLOGURL.state  
  36.   is '状态,0为认证的网址(比较知名的网站域名),1为未认证的网址(小网站),2为锁定不允许点击(广告类的网址)';  
  37. comment on column MINIBLOGURL.backup1  
  38.   is 'MD5值,用来比较网址是否已经存在';  
  39. comment on column MINIBLOGURL.backup2  
  40.   is '备用字段2';  
  41. -- Create/Recreate primary, unique and foreign key constraints   
  42. alter table MINIBLOGURL  
  43.   add constraint PK_ID primary key (ID)  
  44.   using index   
  45.   tablespace TAB_GXT  
  46.   pctfree 10  
  47.   initrans 2  
  48.   maxtrans 255  
  49.   storage  
  50.   (  
  51.     initial 64K  
  52.     next 1M  
  53.     minextents 1  
  54.     maxextents unlimited  
  55.   );  
  56. -- Create/Recreate indexes   
  57. create index IX_CREATEUSER on MINIBLOGURL (CREATEUSER)  
  58.   tablespace TAB_GXT  
  59.   pctfree 10  
  60.   initrans 2  
  61.   maxtrans 255  
  62.   storage  
  63.   (  
  64.     initial 64K  
  65.     next 1M  
  66.     minextents 1  
  67.     maxextents unlimited  
  68.   );  
  69. create unique index IX_MD5 on MINIBLOGURL (BACKUP1)  
  70.   tablespace TAB_GXT  
  71.   pctfree 10  
  72.   initrans 2  
  73.   maxtrans 255  
  74.   storage  
  75.   (  
  76.     initial 64K  
  77.     next 1M  
  78.     minextents 1  
  79.     maxextents unlimited  
  80.   );  
  81. create index IX_SURL on MINIBLOGURL (SURL)  
  82.   tablespace TAB_GXT  
  83.   pctfree 10  
  84.   initrans 2  
  85.   maxtrans 255  
  86.   storage  
  87.   (  
  88.     initial 64K  
  89.     next 1M  
  90.     minextents 1  
  91.     maxextents unlimited  
  92.   );  
  93. create index IX_TURL on MINIBLOGURL (TURL)  
  94.   tablespace TAB_GXT  
  95.   pctfree 10  
  96.   initrans 2  
  97.   maxtrans 255  
  98.   storage  
  99.   (  
  100.     initial 64K  
  101.     next 1M  
  102.     minextents 1  
  103.     maxextents unlimited  
  104.   );  


至此,基于上面的代码即可完成微博的长短URL相互转换,具体应用的时候还需要自己进行调整修改。


本文转自: http://blog.csdn.net/5653325/article/details/6639829

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值