php在中url处理方面很有用的几个函数

http_build_query

(PHP 5) http_build_query — 生成 URL-encode 之后的请求字符串

<?php
$data = array('foo'=>'bar',
'baz'=>'boom',
'cow'=>'milk',
'php'=>'hypertext processor');
echo http_build_query($data); // foo=bar&baz=boom&cow=milk&php=hypertext+processor
?>

compact

array compact ( mixed $varname [, mixed $... ] )

(PHP 4, PHP 5)  compact — 建立一个数组,包括变量名和它们的值

<?php
$city  = "San Francisco";
$state = "CA";
$event = "SIGGRAPH";
$result = compact("city", "state", "event");
// array('city'=>'"San Francisco"','state'=>'CA','event' => "SIGGRAPH")
?>

-------------

$qs=compact('province','city','name');
foreach($qs as $key => $value){
    if(!$value){
        unset($qs[$key]);
    }
}
$url='something/search/?'.http_build_query($qs) ;

php下,对url路径规整化,剔除多余的上层目录(../)、当前目录(./)

php下,对url规整化,剔除多余的上层目录(../)、当前目录(./)

有时会构造出这样形式的url

/test/valums-file-uploader-cf7bfb1//./client/client/../.././tests/120720093725954.jpg

虽然在url里可以正常使用,但毕竟太啰嗦,也不美观,应该剔除其中多余的 "./" 与 "../",可以参考如下函数,使用preg正则表达式实现,使用前确认你的php环境有对preg正则表达式的支持。

function constrict_url_path($path)
{
    //转换dos路径为*nix风格
    $path=str_replace('\\','/',$path);
    //替换$path中的 /xxx/../ 为 / ,直到替换后的结果与原串一样(即$path中没有/xxx/../形式的部分)
    $last='';
    while($path!=$last){
        $last=$path;
        $path=preg_replace('/\/[^\/]+\/\.\.\//','/',$path);
    }
    //替换掉其中的 ./ 部分 及 //  部分
    $last='';
    while($path!=$last){
        $last=$path;
        $path=preg_replace('/([\.\/]\/)+/','/',$path);
    }
    return $path;
}