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 相关文章推荐
php5数字型字符串加解密代码
Apr 24 PHP
用PHP程序实现支持页面后退的两种方法
Jun 30 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
Feb 22 PHP
PHP 数组和字符串互相转换实现方法
Mar 26 PHP
php 目录遍历、删除 函数的使用介绍
Apr 28 PHP
PHP自定义大小验证码的方法详解
Jun 07 PHP
Laravel 5.0 发布 新版本特性详解
Feb 10 PHP
PHP中调用C/C++制作的动态链接库的教程
Mar 10 PHP
PHP针对字符串开头和结尾的判断方法
Jul 11 PHP
php提供实现反射的方法和实例代码
Sep 17 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
Oct 12 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
Oct 16 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
收音机术语解释
2021/03/01 无线电
PHP批量生成缩略图的代码
2008/07/19 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
CodeIgniter框架过滤HTML危险代码
2014/06/12 PHP
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
在thinkphp5.0路径中实现去除index.php的方式
2019/10/16 PHP
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
2015/07/01 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
浅谈JS继承_寄生式继承 &amp; 寄生组合式继承
2016/08/16 Javascript
超全面的vue.js使用总结
2017/02/12 Javascript
jQuery事件详解
2017/02/23 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
2018/02/01 Javascript
javascript中关于类型判断的一些疑惑小结
2018/10/14 Javascript
Jquery和CSS实现选择框重置按钮功能
2018/11/08 jQuery
使用vue for时为什么要key【推荐】
2019/07/11 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
Javascript实现秒表计时游戏
2020/05/27 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
[06:35]2014DOTA2国际邀请赛 老男孩梦圆西雅图中国军团世界最强
2014/07/22 DOTA
Python异常学习笔记
2015/02/03 Python
Python全局变量操作详解
2015/04/14 Python
Python中List.index()方法的使用教程
2015/05/20 Python
Python访问纯真IP数据库脚本分享
2015/06/29 Python
13个最常用的Python深度学习库介绍
2017/10/28 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
大学毕业生个人自荐信范文
2014/01/08 职场文书
农民工创业典型事迹
2014/01/25 职场文书
80后职场人的职业生涯规划
2014/03/08 职场文书
搞笑爱情保证书
2014/04/29 职场文书
主持稿开场白
2015/06/01 职场文书