【函数应用】PHP中关于URL的函数处理
一,函数介绍
1.解析HTTP头信息:get_header()
array get_headers ( string 目标URL [, int $format = 0 【如果将可选的 format
参数设为 1,则 get_headers() 会解析相应的信息并设定数组的键名】] )
返回包含有服务器响应一个 HTTP 请求所发送标头的索引或关联数组,如果失败则返回 FALSE
。
相似的还有
apache_request_headers(void) 返回包含当前Apache请求所有头信息的数组,失败返回 FALSE
。
apache_response_headers(void)成功时返回包含全部 Apache 响应头信息的数组, 或者在失败时返回 FALSE
.
2.解释meta标签:get_meta_tags()
array get_meta_tags ( string $filename [, bool $use_include_path = false ] )
参数:
filename
HTML 文件的路径字符串。 此参数可以是本地文件也可以是一个 URL。
use_include_path
将 use_include_path
设置为 TRUE
将使 PHP 尝试按照 include_path 标准包含路径中的每个指向去打开文件。这只用于本地文件,不适用于 URL。
打开 filename
逐行解析文件中的 <meta> 标签。解析工作将在 </head> 处停止。
返回一个数组,包含所有解析过的 meta 标签。
返回的关联数组以属性 name 的值作为键,属性 content 的值作为值,所以你可以很容易地使用标准数组函数遍历此关联数组或访问某个值。 属性 name 中的特殊字符将使用‘_’替换,而其它字符则转换成小写。如果有两个 meta 标签拥有相同的 name,则只返回最后出现的那一个。
3.生成URL请求字符串:http_build_query()
string http_build_query ( mixed $query_data [, string $numeric_prefix [, string $arg_separator [, int $enc_type = PHP_QUERY_RFC1738 ]]] )
参数:
query_data
可以是数组或包含属性的对象。
一个 query_data
数组可以是简单的一维结构,也可以是由数组组成的数组(其依次可以包含其它数组)。
如果 query_data
是一个对象,只有 public 的属性会加入结果。
numeric_prefix
如果在基础数组中使用了数字下标同时给出了该参数,此参数值将会作为基础数组中的数字下标元素的前缀。
这是为了让 PHP 或其它 CGI 程序在稍后对数据进行解码时获取合法的变量名。
arg_separator
除非指定并使用了这个参数,否则会用 arg_separator.output 来分隔参数。
enc_type
默认使用 PHP_QUERY_RFC1738
。
如果 enc_type
是 PHP_QUERY_RFC1738
,则编码将会以 » RFC 1738 标准和 application/x-www-form-urlencoded 媒体类型进行编码,空格会被编码成加号(+)。
如果 enc_type
是 PHP_QUERY_RFC3986
,将根据 » RFC 3986 编码,空格会被百分号编码(%20)。
返回:
返回一个 URL 编码后的字符串。
例:
<?php $data = array(
'mother','father','son',
'foo'=>'bar',
'baz'=>'boom',
'cow'=>'milk',
'php'=>'hypertext processor',
'user'=>array(
'name'=>'bob',
'age'=>17,
'class'=>'one'
)
); echo http_build_query($data) . "<br/>";
echo http_build_query($data, '', '&').'<br/>';
echo http_build_query($data, 'P_', '&').'<br/>'; 输出:
/*
0=mother&1=father&2=son&foo=bar&baz=boom&cow=milk&php=hypertext+processor&user%5Bname%5D=bob&user%5Bage%5D=17&user%5Bclass%5D=one
0=mother&1=father&2=son&foo=bar&baz=boom&cow=milk&php=hypertext+processor&user%5Bname%5D=bob&user%5Bage%5D=17&user%5Bclass%5D=one
P_0=mother&P_1=father&P_2=son&foo=bar&baz=boom&cow=milk&php=hypertext+processor&user%5Bname%5D=bob&user%5Bage%5D=17&user%5Bclass%5D=one
*/
4.解析URL并返回其组成部分:parse_url()
mixed parse_url ( string $url [, int $component = -1 ] )
参数
url
-
要解析的 URL。无效字符将使用 _ 来替换。
component
-
指定
PHP_URL_SCHEME
、PHP_URL_HOST
、PHP_URL_PORT
、PHP_URL_USER
、PHP_URL_PASS
、PHP_URL_PATH
、PHP_URL_QUERY
或PHP_URL_FRAGMENT
的其中一个来获取 URL 中指定的部分的 string。 (除了指定为PHP_URL_PORT
后,将返回一个 integer 的值)。
返回:
对严重不合格的 URL,parse_url() 可能会返回 FALSE
。
如果省略了 component
参数,将返回一个关联数组 array,在目前至少会有一个元素在该数组中。数组中可能的键有以下几种:
- scheme - 如 http
- host
- port
- user
- pass
- path
- query - 在问号 ? 之后
- fragment - 在散列符号 # 之后
如果指定了 component
参数, parse_url() 返回一个 string (或在指定为 PHP_URL_PORT
时返回一个 integer)而不是 array。如果 URL 中指定的组成部分不存在,将会返回 NULL
。
parse_url可以解释丢失协议的url如://www.baidu.com/index.php?a=1&b=2
parse_url不能用于相对url
5.将字符串解释成多个变量:parse_str()
void parse_str ( string $str [, array &$arr ] )
如果 str
是 URL 传递入的查询字符串(query string),则将它解析为变量并设置到当前作用域。
获取当前的 QUERY_STRING,你可以使用 $_SERVER['QUERY_STRING'] 变量。
magic_quotes_gpc 影响到了 parse_str() 这个函数的输出,和 PHP 用于填充 $_GET、 $_POST 及其他变量的机制一致。
虽然第二个参数为可选,但如果不填,则处理后的数据也无处安放,因此一般2个参数都填上。
例:parse_str完美解释http_bulid_query()生成的请求字符串
<?php
$data = array(
'mother','father','son',
'foo'=>'bar',
'baz'=>'boom',
'cow'=>'milk',
'php'=>'hypertext processor',
'user'=>array(
'name'=>'bob',
'age'=>17,
'class'=>'one'
)
); $query=http_build_query($data);
parse_str($query,$arr);
var_dump($arr); /*
输出
array (size=8)
0 => string 'mother' (length=6)
1 => string 'father' (length=6)
2 => string 'son' (length=3)
'foo' => string 'bar' (length=3)
'baz' => string 'boom' (length=4)
'cow' => string 'milk' (length=4)
'php' => string 'hypertext processor' (length=19)
'user' =>
array (size=3)
'name' => string 'bob' (length=3)
'age' => string '17' (length=2)
'class' => string 'one' (length=3)
*/
6.URL参数字符串编码,解码:urlencode(),urldecode()
string urlencode ( string $str )
此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页。
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 » RFC3896 编码(参见 rawurlencode())不同。
string urldecode ( string $str )
解码给出的已编码字符串中的任何 %##。 加号('+')被解码成一个空格字符。
返回解码后的字符串。
注意改函数仅用于对URL请求参数部分进行编解码。
7.URL参数字符串编码,解码:rawurlencode(),rawurldecode()
string rawurlencode ( string $str )
根据 » RFC 3986 编码指定的字符。
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在 » RFC 3986 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。
string rawurldecode ( string $str )
返回字符串,此字符串中百分号(%)后跟两位十六进制数的序列都将被替换成原义字符。
rawurldecode() 不会把加号('+')解码为空格,而 urldecode() 可以。
8.获取文件路径信息:pathinfo()
mixed pathinfo ( string $path [, int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME ] )
pathinfo() 返回一个关联数组包含有 path 的信息。返回关联数组还是字符串取决于 options
。
参数:
path
要解析的路径。
options
如果指定了,将会返回指定元素;它们包括:PATHINFO_DIRNAME
,PATHINFO_BASENAME
和 PATHINFO_EXTENSION
或 PATHINFO_FILENAME
。
如果没有指定 options
默认是返回全部的单元。
返回:
如果没有传入 options
,将会返回包括以下单元的数组 array:dirname,basename 和 extension(如果有),以 及filename。如果有,则返回options所指定的值
相似的还有:
dirname()返回文件路径目录部分,相当于pathinfo(path,PATHINFO_DIRNAME)
basename()返回路径中文件名部分,相当于pathinfo(path,PATHINFO_BASENAME)
二,实践应用
1.获取URL中的参数
例:http://www.baidu.com/index.php?m=content&c=index&a=lists&catid=6&area=0&author=九把刀&h=嘿嘿嘿'
解决方法:
//第一种:切割字符串
function params($url)
{
$p=[];
$urls=explode('?',$url);
$params=str_replace('&&','&',$urls[1]);
$params_arr=explode('&',$params);
foreach($params as $param)
{
$_v=explode('=',$param);
$p[$_v[0]]=$_v[1];
}
return $p;
}
//第二种:使用正则匹配
function params($url)
{
$p=[];
preg_match_all('/([^\=\?\&]+)\=([^&$]+)/',$url,$matches); foreach($matches[1] as $k=>$v)
{
$p[$matches[1][$k]]=$matches[2][$k];
}
return $p;
}
//第三种,使用parse_url配合parse_str,最简便
function params($url)
{
$query=parse_url($url,PHP_URL_QUERY);
//或parse_url($url)['query']
parse_str($query,$p);
return $p;
}
2,将HTML文档中的<img src="/images/1.jpg">替换为绝对路径,根目录http://www.pic.com
解决:
$newdoc=preg_replace_callback('/<img[\s\S]+src\s*=\s*[\'\"](\/[^\'\"]+)[\'\"]/',function($m){ if(empty(parse_url($m[1],PHP_URL_HOST)))
{
$newsrc='http://www.pic.com/'.ltrim($m[1],'/');
return str_replace($m[1],$newsrc,$m[0]);
} },$html);
3.获取url中的文件扩展名
解决:
//方法一:exlode分隔
function getextension1($url)
{
$slice=explode('.',$url);
return $slice[count($slice)-1];
}
//方法二:substr分隔字符串,strrpos获取字符串最后一个位置
function getextension2($url)
{
return substr($url,strrpos($url,'.')+1);
}
对于标准的URL,则需要忽略请求url中的参数字符串
//方法三:使用parse_url获取标准URL中的文件扩展名
function getextension3($url)
{
$path=parse_url($url,PHP_URL_PATH);
return substr($path,strrpos($path,'.')+1);
}
//或方法四:
function getextension4($url)
{
$path=parse_url($url,PHP_URL_PATH);
$basename=basename($path);
return explode('.',$basename)[1];
}
对于如下的URL,很容易看出方法一二和三四的区别
http://image.baidu.com/search/down.php?tn=download&word=download&ie=utf8&fr=detail&url=http%3A%2F%2Fa.ikafan.com%2Fattachment%2Fforum%2F201307%2F10%2F064752oxbjxuhuiw0bfxrp.jpg&thumburl=http%3A%2F%2Fc.hiphotos.baidu.com%2Fimage%2Fh%253D220%2Fsign%3D01eff8eaf6039245beb5e60db794a4a8%2F4b90f603738da977fb33880cba51f8198618e3fd.jpg
未完...
【函数应用】PHP中关于URL的函数处理的更多相关文章
- mysql常用内置函数-查询语句中不能使用strtotime()函数!
来自:http://yushine.iteye.com/blog/775407 FROM_UNIXTIME把 unix时间戳转换为标准时间 unix_timestamp把标准时间转换为 unix时间戳 ...
- Matlab中的eig函数和Opecv中eigen()函数的区别
奇异值分解的理论参见下面的链接 http://www.cnblogs.com/pinard/p/6251584.html https://blog.csdn.net/shenziheng1/artic ...
- Python 函数式编程 & Python中的高阶函数map reduce filter 和sorted
1. 函数式编程 1)概念 函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念.wiki 我们知道,对象是面向对象的第一型,那么函数式编程也是一样,函数是函数 ...
- Unity3D中Mathf数学运算函数总结
引入: 看到一个案例注意到函数Mathf.SmoothDamp的使用,游戏中用于做相机的缓冲跟踪和boss直升机跟踪士兵.该函数是Unity3D中Mathf数学运算函数中的一个.一些游戏使用了smoo ...
- matlab中的输出显示函数
matlab中的输出显示函数 在matlab中使用的显示函数有disp.sprintf.fprintf比较常用.下面来介绍一下他们的用法. 1.disp()函数: disp(x)主要是用来输出变量x的 ...
- MVC中JQuery文件引入的路径问题,@Url.Content函数
今天写了个MVC的Demo,文件夹结构很简单,如下: 利用EF生成Model框架并手工加表字段注解,但在页面上JS验证始终没显示.实在无语. 无意中在浏览器里按F12,看见提示: Failed t ...
- Ajax_04之jQuery中封装的Ajax函数
1.PHP中json_encode编码规则: PHP索引数组编码为JSON:[...] PHP关联数组编码为JSON:{...}2.jQuery中AJAX封装函数之load: ①使用:$('选择器') ...
- jgGrid中的editrules使用函数来进行验证
jgGrid中的editrules 用于设置一些用于可编辑列的colModel的额外属性,大多数的时候是用来在提交到服务器之前验证用户的输入合法性的.比如editrules:{edithidden:t ...
- Loadrunner中web_find和web_reg_find函数的使用与区别
总结一下Loadrunner中的检查点函数,主要介绍两个函数:web_find()和web_reg_find():这两个函数均用于内容的查找,但两者也有本质的区别,具体介绍如下:一.web_find( ...
随机推荐
- JavaScript跨域资源请求(CORS)解决方案
跨域:当协议.主域名.子域名.端口号中任意一个不相同时都不算同一个域,而在不同域之间请求数据即为跨域请求.解决方法有以下几种(如有错误欢迎指出)以请求图片url为例: 1.通过XMLHttpReque ...
- Dell 笔记本触摸板网页双指滑动黑屏
# 问题如题 # 解决方法: -- 在网上搜了解决方法,最靠谱的一个是说,开机进BIOS,然后什么都不修改退出,重启就能解决(但是我采用这种方法并没有解决) -- 我自己的解决方法:设备管理器里面卸载 ...
- (转)linux磁盘分区fdisk分区和parted分区
linux磁盘分区fdisk分区和parted分区 原文:http://www.cnblogs.com/jiu0821/p/5503660.html ~~~~~~~~~~~~~~~~~~~~~~~~~ ...
- 工厂模式 jdbc 面向接口dao 开发 单例
package com.itheima.utils; import java.io.IOException; import java.io.InputStream; import java.util. ...
- @b.windows.last.use
@b.windows.last.use @b.windows.first.use be_true 一般用在step文件中
- JDK工具
在之前的教程中,我曾介绍过 这些工具.现在,我向大家介绍其中最重要的5个工具. 1.javap javap是一个Java类文件反汇编程序,可以查看Java编译器生成的字节码,是分析代码的一个好工具.让 ...
- 用命令行的方式将本地项目上传到git
1.(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库 git init 2.把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小数点 ...
- 面向对象(OOP)二
一.“魔术”函数 - 自动调用 魔术方法 在面向对象有一些特别的方法,无需特别定义,已自动具备某些功能,例如构造函数__construt,这些方法统称魔术方法,在日后的编程中,可以使用这些方法的特性设 ...
- BaiduPCS-Go 使用CMD命令行全速下载百度云
BaiduPCS-Go 使用CMD命令行全速下载百度云 链接: https://laod.cn/black-technology/baidupcs-go-baiduyun.html 下面为自己测试过程 ...
- LeetCode Number of 1 Bits 计算1的个数
题意: 提供一个无符号32位整型uint32_t变量n,返回其二进制形式的1的个数. 思路: 考察二进制的特性,设有k个1,则复杂度为O(k).考虑将当前的数n和n-1做按位与,就会将n的最后一个1去 ...