手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:parse_url

PHP获取当前网址/替换网址query中的值

这是一篇来自虫少侠的文章,事实上我也写过类似的。不过我当初是用在模版里,写在模版里为smarty中的。。。用法大致为{$url|urlreplace:"abc=def"},也就是把url里abc的键值换为Def,这样就避免在参数过多的时候,我一一输入了。。适合用在搜索后,一些Tag标签的切换等。。。。

下面就是虫少侠的内容了:

项目中用到的两个函数,自己写了下,放这做为备份吧。

一是PHP获取当前页面的网址:

PHP代码
  1. //获得当前的脚本网址【我稍整理了一下。。。鄙视不整理代码的人】  
  2. function GetCurUrl(){  
  3.     if(!emptyempty($_SERVER["REQUEST_URI"])){  
  4.         $scriptName = $_SERVER["REQUEST_URI"];  
  5.         $nowurl = $scriptName;  
  6.     }else{  
  7.         $scriptName = $_SERVER["PHP_SELF"];  
  8.         if(emptyempty($_SERVER["QUERY_STRING"])) $nowurl = $scriptName;  
  9.         else $nowurl = $scriptName."?".$_SERVER["QUERY_STRING"];  
  10.     }  
  11.     return $nowurl;  
  12. }  

另一个是PHP替换网址中query部分的某变量的值比如 ,我们要设$url中的key=321;

其实有几种情况:

$url=’www.sina.com/a.php?key=330′;

或$url=’www.sina.com/a.php;

或$url=’www.sina.com/a.php?cat=2′;

等等。虽然情况很多,但PHP处理起来非常简单,如下:

PHP代码
  1. /* 将URL中的某参数设为某值*/ //【这一段就挺好啊】  
  2. function url_set_value($url,$key,$value)  
  3. {  
  4.     $a=explode('?',$url);  
  5.     $url_f=$a[0];  
  6.     $query=$a[1];  
  7.     parse_str($query,$arr);  
  8.     $arr[$key]=$value;  
  9.     return $url_f.'?'.http_build_query($arr);  
  10. }  

原文来自:http://roln.cn/2009/07/30/lamp/some-php-url-function/

不过我的替换是这样写的。。当然也很烂 。。

PHP代码
  1. <?php  
  2. /** 
  3.  *使用例程:可用于分页类或页面中的替换等 
  4.     $url = "add_jd.php?pid=4&tb=gm_jd&page=1"; 
  5.     echo( "原始的URL:" . $url ); 
  6.     echo( '<br/>' ); 
  7.     echo( "字符串参数:" . url::replace( $url , "pid=10,page=2") ); 
  8.     echo( '<br/>' ); 
  9.     echo( "数组型参数:" . url::replace( $url , array('pid'=>10,'page'=>5)) ); 
  10.     //echo( urlReplace( $url , array('pid'=>10,'page'=>5)) ); 
  11. */  
  12. /** 
  13.  * url replace 
  14.  * @param string $url 需要替换的URL字符串,一般为aaa.php?abc=def,也可以带上路径,象http://xxx.com/abc/def.php?aa=bb 
  15.  * @param mixed $options 需要替换的变量,可以是字符串或数组,如果是字符串,格式为"aa=bb,cc=dd",有多个,用","隔开 
  16.  * @return string $url 替换后的URL 
  17.  */  
  18. class url   
  19. {  
  20.     static function replace ( $url , $options)  
  21.     {  
  22.         $options = self::optInit( $options );  
  23.         $Query = parse_url$url , PHP_URL_QUERY );  
  24.         if($Query){  
  25.             parse_str$Query , $GET );  
  26.             if ( $GET ){  
  27.                 //foreach ( $GET as $_k => $_v ){  
  28.                 //  //if( array_key_exists( $_k , $options)){  
  29.                 //      $GET[$_k] = $options[$_k];  
  30.                 //  //}  
  31.                 //}  
  32.                 $GET = array_merge($GET,$options);  
  33.             }  
  34.             return str_replace$Query , http_build_query( $GET ), $url );            
  35.         }  
  36.         if( !$Query && $options ){  
  37.             return $url . "?" . http_build_query($options);  
  38.         }  
  39.         return $url;  
  40.     }  
  41.   
  42.     static private function optInit ( $options )  
  43.     {  
  44.         ifis_string$options )){  
  45.             $optlists = Power::Normalize( $options );  
  46.             foreach$optlists as $val){  
  47.                 list($tmpKey,$tmpVal) = Power::Normalize( $val , "=");  
  48.                 $opts[$tmpKey] = $tmpVal;  
  49.             }  
  50.         }else{  
  51.             $opts = $options;  
  52.         }  
  53.         //unset( $options );  
  54.         return $opts;  
  55.     }  
  56. }  
......虽然考虑了一些东西,但也仅仅是个很一般的解决方法

 

Tags: parse_str, parse_url