PHP长网址与短网址的实现方法


Posted in PHP onOctober 13, 2017

顾名思义,长链接就是一个很长的链接;短链接就是一个很短的链接。长链接可以生成短链接,短链接来源于长链接。

什么是长链接、短链接

顾名思义,长链接就是一个很长的链接;短链接就是一个很短的链接。长链接可以生成短链接,短链接来源于长链接。

为什么要使用长链接、短链接

更加美观,我们可以对长链接和短链接进行对比,很显然可以看出短链接相对成链接来说更加的短小,显得更加的美观。

安全性,长链接可能会携带一些参数,例如http://xxx.xxx.xxx?id=1¶m1=san,我们能够轻松的看出,该url采用的是get的方式,同时也能看出请求了哪些参数。然而短链接http://t.cn/RNGQRUJ,我们只能访问不能轻易的查看处携带了哪些参数等条件。

示例代码下载地址:链接: https://pan.baidu.com/s/1kVh4FQ3 密码: 4r8p

使用场景

微博内容的分享

短信包含的链接

微信分享链接

实现方法

按照百度百科的解释,长链接转换为短链接主要采用了md5加密的方式来实现转换的。

代码实现

创建一个curl工具函数

// SINA_APPKEY就是你在微信开发者平台的appkey 
define('SINA_APPKEY', ''); 
function curlQuery($url) 
{ 
  //设置附加HTTP头 
  $addHead = array( 
    "Content-type: application/json", 
  ); 
  //初始化curl,当然,你也可以用fsockopen代替 
  $curl_obj = curl_init(); 
  //设置网址 
  curl_setopt($curl_obj, CURLOPT_URL, $url); 
  //附加Head内容 
  curl_setopt($curl_obj, CURLOPT_HTTPHEADER, $addHead); 
  //是否输出返回头信息 
  curl_setopt($curl_obj, CURLOPT_HEADER, 0); 
  //将curl_exec的结果返回 
  curl_setopt($curl_obj, CURLOPT_RETURNTRANSFER, 1); 
  //设置超时时间 
  curl_setopt($curl_obj, CURLOPT_TIMEOUT, 15); 
  //执行 
  $result = curl_exec($curl_obj); 
  //关闭curl回话 
  curl_close($curl_obj); 
  return $result; 
}

创建短链接和长链接的方法

//根据长网址获取短网址 
function sinaShortenUrl($long_url) 
{ 
  //拼接请求地址,此地址你可以在官方的文档中查看到 
  $url = 'http://api.t.sina.com.cn/short_url/shorten.json?source=' . SINA_APPKEY . '&url_long=' . $long_url; 
  //获取请求结果 
  $result = curlQuery($url); 
  //下面这行注释用于调试, 
  //print_r($result);exit(); 
  //解析json 
  $json = json_decode($result); 
  //异常情况返回false 
  if (isset($json->error) || !isset($json[0]->url_short) || $json[0]->url_short == '') { 
    return false; 
  } else { 
    return $json[0]->url_short; 
  } 
} 
//根据短网址获取长网址,此函数重用了不少sinaShortenUrl中的代码,以方便你阅读对比,你可以自行合并两个函数 
function sinaExpandUrl($short_url) 
{ 
  //拼接请求地址,此地址你可以在官方的文档中查看到 
  $url = 'http://api.t.sina.com.cn/short_url/expand.json?source=' . SINA_APPKEY . '&url_short=' . $short_url; 
  //获取请求结果 
  $result = curlQuery($url); 
  //下面这行注释用于调试 
  //print_r($result);exit(); 
  //解析json 
  $json = json_decode($result); 
  //异常情况返回false 
  if (isset($json->error) || !isset($json[0]->url_long) || $json[0]->url_long == '') { 
    return false; 
  } else { 
    return $json[0]->url_long; 
  } 
}

创建一个url处理函数

//简单处理下url,sina对于没有协议(http://)开头的和不规范的地址会返回错误 
function filterUrl($url = '') 
{ 
  $url = trim(strtolower($url)); 
  $url = trim(preg_replace('/^http:\//', '', $url)); 
  if ($url == '') { 
    return false; 
  } else { 
    return urlencode('http://' . $url); 
  } 
}

调用函数

//要缩短的网址 
$url = "http://www.qqdeveloper.com/detail/25/1.html"; //这里自己看着办,修改成你要缩短的网址还是获取post的数据还是怎么滴。 
$url = filterUrl($url); //对URL进行简单处理的方法 
echo $short = sinaShortenUrl($url); //根据传入的长网址生产短网址 
echo "</br>"; 
echo $ulong = sinaExpandUrl($short);

总结

以上所述是小编给大家介绍的PHP长网址与短网址的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
我的论坛源代码(三)
Oct 09 PHP
php面向对象全攻略 (十) final static const关键字的使用
Sep 30 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
May 19 PHP
PHP生成等比缩略图类和自定义函数分享
Jun 25 PHP
Linux系统下php获得系统分区信息的方法
Mar 30 PHP
php将字符串随机分割成不同长度数组的方法
Jun 01 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
Dec 31 PHP
使用php+swoole对client数据实时更新(一)
Jan 07 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
Jan 08 PHP
php读取本地json文件的实例
Mar 07 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
Oct 15 PHP
laravel框架之数据库查出来的对象实现转化为数组
Oct 23 PHP
如何直接访问php实例对象中的private属性详解
Oct 12 #PHP
thinkphp中的多表关联查询的实例详解
Oct 12 #PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
Oct 12 #PHP
利用PHP实现开心消消乐的算法示例
Oct 12 #PHP
深入理解PHP中mt_rand()随机数的安全
Oct 12 #PHP
php表单习惯用的正则表达式
Oct 11 #PHP
彻底搞懂PHP 变量结构体
Oct 11 #PHP
You might like
使用 php4 加速 web 传输
2006/10/09 PHP
第九节--绑定
2006/11/16 PHP
smarty模板判断数组为空的方法
2015/06/10 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
2017/08/10 PHP
parseInt parseFloat js字符串转换数字
2010/08/01 Javascript
JavaScript类库D
2010/10/24 Javascript
jquery isType() 类型判断代码
2011/02/14 Javascript
将list转换为json失败的原因
2013/12/17 Javascript
与Math.pow 相反的函数使用介绍
2014/08/04 Javascript
javascript实现瀑布流加载图片原理
2016/02/02 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
Bootstrap在线电子商务网站实战项目5
2016/10/14 Javascript
整理关于Bootstrap警示框的慕课笔记
2017/03/29 Javascript
利用Vue.js实现求职在线之职位查询功能
2017/07/03 Javascript
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
2018/08/25 Javascript
node实现简单的增删改查接口实例代码
2019/08/22 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
[03:02]安得倚天剑,跨海斩长鲸——中国军团出征DOTA2国际邀请赛
2018/08/14 DOTA
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python 连连看连接算法
2008/11/22 Python
用Python解析XML的几种常见方法的介绍
2015/04/09 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
python实现textrank关键词提取
2018/06/22 Python
Python程序包的构建和发布过程示例详解
2019/06/09 Python
Python如何使用turtle库绘制图形
2020/02/26 Python
python sitk.show()与imageJ结合使用常见的问题
2020/04/20 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
html5 svg 中元素点击事件添加方法
2013/01/16 HTML / CSS
法人授权委托书格式
2014/04/08 职场文书
关于读书的演讲稿
2014/05/07 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
建议书范文
2015/02/05 职场文书
Python3接口性能测试实例代码
2021/06/20 Python