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 相关文章推荐
php面向对象全攻略 (十) final static const关键字的使用
Sep 30 PHP
PHP 压缩文件夹的类代码
Nov 05 PHP
php获取后台Job管理的实现代码
Jun 10 PHP
mysql数据库差异比较的PHP代码
Feb 05 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
Sep 04 PHP
php去除换行(回车换行)的三种方法
Mar 26 PHP
Laravel 5框架学习之子视图和表单复用
Apr 09 PHP
Symfony2中被遗弃的getRequest()方法分析
Mar 17 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
Sep 11 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
May 21 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
Oct 15 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
php 获得汉字拼音首字母的函数
2009/08/01 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
JavaScript 学习笔记(十六) js事件
2010/02/01 Javascript
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
使用jquery中height()方法获取各种高度大全
2014/04/02 Javascript
jQuery操作cookie方法实例教程
2014/11/25 Javascript
浅谈addEventListener和attachEvent的区别
2016/07/14 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
2017/02/08 Javascript
JS如何判断浏览器类型和详细区分IE各版本浏览器
2017/03/04 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
微信小程序实现同一页面取值的方法分析
2019/04/30 Javascript
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
[03:41]2018完美盛典-《Fight With Us》
2018/12/16 DOTA
python3实现多线程聊天室
2018/12/12 Python
Python魔法方法功能与用法简介
2019/04/04 Python
Python可迭代对象操作示例
2019/05/07 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
python实现图片二值化及灰度处理方式
2019/12/07 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
详解python算法常用技巧与内置库
2020/10/17 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
目标责任书格式
2014/07/28 职场文书
学校机关党总支领导班子整改工作方案
2014/10/26 职场文书
小学教育见习总结
2015/06/23 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python