当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

9.1URL地址分析

9/17/2020 9:31:19 PM 人评论

9.1URL地址分析

9.1 URL地址分析

在PHP的实际应用中,对URL地址的处理主要涉及URL的编码、解码及分析3个方面,PHP提供了3个函数,对URL进行处理。它们是urlencode()、urldecode()和parse_url()。

9.1.1 为什么要对URL进行处理

有时需要将一个URL作为一个整体,通过另一个URL传递给一个程序,即将一个URL作为参数传递给另外一个URL。因为被传递的URL里也可能带有查询字符串,为避免和原URL的参数冲突,需要将被传递的URL进行处理,也就是要对URL做编码。此外,对于中文参数值的传递也应该进行URL编码。因此,对URL编码是PHP开发中经常碰到的问题,初学者有必要掌握基本的处理函数。

9.1.2 对URL进行编码

PHP提供了函数urlencode对URL进行编码,语法如下。


string urlencode ( string $str);

函数urlencode()接受一个字符串参数作为输入,返回值也是一个字符串,返回值字符串中的所有非字母和数字字符变成一个百分号(%)和一个两位的十六进制数,如字符串“&”会被转换成“%26”。

说明 空格则会被转换成一个加号(+)。另外,函数urlencode()不会对-、_和.(英文句点)符号做转换。

代码9-1演示了如何将一个URL地址编码后输出。

代码9-1 对URL进行编码9-1.php


     01 <?php
     02 $url = "http://localhost.com/?user=abcd&code=1234"; //
定义url
变量
     03 $decode_url = urlencode($url);                          //
对url
进行编码
     04 
     05 echo "
编码前,URL
为:<br/>".$url."<br/>";
     06 echo "<br/>";
     07 echo "<hr>";
     08 echo "<br/>";
     09 
     10 echo "
编码后,URL
为:<br/>".$decode_url;
     11 ?>

【代码解析】代码第02行定义了一个URL的地址变量$url,从代码中可以看出,用户名和密码都被暴露在外面。第03行通过urlencode()函数对地址进行编码,这样就不能轻易读取用户名和密码了。这段程序在页面输出的结果如图9-1所示。

图9-1 对URL编码

9.1.3 对URL进行解码

PHP提供了函数urldecode()对编码过的字符串解码,这个函数可以看做是上9.12节所介绍的函数urlencode()的逆运算,语法如下。


string urldecode (string $str )

函数urldecode()的参数是一个字符串,此函数将编码后诸如%##形式的字符串解码,如将“id%3D007”转换成“id=007”。代码9-2所示的程序会将9.12小节编码的URL地址解码,然后将结果输出到页面。

代码9-2 对编码的URL进行解码9-2.php


     01 <?php
     02 $url_encode="http%3A%2F%2Flocalhost.com%2F%3Fuser%3Dabcd%26code%3D1234";//
编码后的url
     03 $url_str = urldecode($url_encode);                      //
对编码的url
进行解码
     04 
     05 echo "
解码前,URL
为:<br/>".$url_encode."<br/>";
     06 echo "<br/>";
     07 echo "<hr>";
     08 echo "<br/>";
     09 
     10 echo "
解码后,URL
为:<br/>".$url_str;
     11 ?>

【代码解析】代码第02行是一个完全看不出任何规律的URL地址,第03行通过函数urldecode()对URL进行解码,这段程序输出结果如图9-2所示,从结果就可以看出URL的规律了。

图9-2 对URL解码

9.1.4 对URL地址进行分析

一个有效的URL地址由多个部分组成,如协议部分、主机(或IP地址)部分、端口号等。有时在程序中需要使用URL地址的某些部分,单纯通过字符串处理函数也可以获取这些部分,但那样做会降低效率,也比较容易出现一些错误。

PHP提供了函数parse_url(),专门用来分析一个有效的URL地址,通过这个函数获取URL地址的各个部分,语法如下。


parse_url ( $url );

函数parse_url()的参数是一个URL地址字符串,返回值是一个关联数组,此数组中存储了URL地址的各个部分,关联数组的每个索引对应URL地址的每个部分。这个关联数组包括如下内容。

·scheme:协议。

·host:主机IP地址或域名。

·port:端口号。

·user:用户名。

·pass:用户密码。

·path:访问路径。

·query:查询参数字符串。

·fragment:参数片段。

下面通过代码9-3所示程序了解函数parse_url()的使用。

代码9-3 使用函数parse_url()分析一个URL 9-3.php


     01 <?php
     02 $url = "http://www.somesite.com:8000/php/code?id=100&cid=900";  //url
变量
     03 $ret_arr = parse_url($url);                                     //
分析指定的url
     04 
     05 echo "
要分析的地址:<br/>".$url;
     06 echo "<hr>";
     07 
     08 echo "<pre>";
     09 echo "
分析结果如下:<br/>";
     10 print_r($ret_arr);
     11 ?>

【代码解析】这段程序第02~03行将URL字符串http://www.somesite.com/php/code?id=100&cid=900作为参数传给函数parse_url(),该函数会将这个字符串做分析后分解成几个部分存入关联数组。程序将函数的返回值赋给变量$ret_arr,最后用print_r输出这个关联数组。代码9-3的最终输出结果如图9-3所示。

图9-3 使用parse_url()分析URL

在这个程序执行结果的关联数组中,索引scheme代表URL地址的协议部分(http),索引host代表主机域名部分(www.somesite.com),索引port代表访问端口部分(8000),索引path表示URL地址的路径部分(/php/code),索引query表示URL地址的查询字符串部分(id=100&cid=900)。

注意 函数parse_url()不能用来验证URL地址是否合法,而只是分解URL地址的各个部分。对一个不完整的URL,函数parse_url()会尝试将其正确解析;对于完全不合格的URL,函数parse_url()会返回FALSE。

相关教程

共有条评论 网友评论

验证码: 看不清楚?