js没有parse_str这个函数,因此,对于querystring就要自己写了。
还好,在location这个对象里,对于querystring都是包含着的。于是乎就有了下面两个处理方式,很简单,没有做任何转换。。。只是演示而己
XML/HTML代码
- var param1 = 'name=123&psw=321&sex=男';
- var param2 = {name: '123',psw: '321', sex: '男'};
从param1转为param2
JavaScript代码
- var param1 = 'name=123&psw=321&sex=男';
- var s = param1.split("&");
- var param2 = {};
- for(var i=0;i<s.length;i++){
- var d=s[i].split("=");
- eval("param2."+d[0]+" = '"+d[1]+"';");
- }
-
- for(i in param2){
- alert(i+' -- '+param2[i]);
- }
从param2转为param1
JavaScript代码
- var arr = [];
- for(i in param2){
- arr.push( i + "=" + param2[i]);
- }
- alert(arr.join("&"))
当然应该有更好的办法,我这里只是简单处理一下
这是一篇来自虫少侠的文章,事实上我也写过类似的。不过我当初是用在模版里,写在模版里为smarty中的。。。用法大致为{$url|urlreplace:"abc=def"},也就是把url里abc的键值换为Def,这样就避免在参数过多的时候,我一一输入了。。适合用在搜索后,一些Tag标签的切换等。。。。
下面就是虫少侠的内容了:
项目中用到的两个函数,自己写了下,放这做为备份吧。
一是PHP获取当前页面的网址:
PHP代码
-
- function GetCurUrl(){
- if(!emptyempty($_SERVER["REQUEST_URI"])){
- $scriptName = $_SERVER["REQUEST_URI"];
- $nowurl = $scriptName;
- }else{
- $scriptName = $_SERVER["PHP_SELF"];
- if(emptyempty($_SERVER["QUERY_STRING"])) $nowurl = $scriptName;
- else $nowurl = $scriptName."?".$_SERVER["QUERY_STRING"];
- }
- return $nowurl;
- }
另一个是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代码
-
- function url_set_value($url,$key,$value)
- {
- $a=explode('?',$url);
- $url_f=$a[0];
- $query=$a[1];
- parse_str($query,$arr);
- $arr[$key]=$value;
- return $url_f.'?'.http_build_query($arr);
- }
原文来自:http://roln.cn/2009/07/30/lamp/some-php-url-function/
不过我的替换是这样写的。。当然也很烂 。。
PHP代码
- <?php
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- class url
- {
- static function replace ( $url , $options)
- {
- $options = self::optInit( $options );
- $Query = parse_url( $url , PHP_URL_QUERY );
- if($Query){
- parse_str( $Query , $GET );
- if ( $GET ){
-
-
-
-
-
- $GET = array_merge($GET,$options);
- }
- return str_replace( $Query , http_build_query( $GET ), $url );
- }
- if( !$Query && $options ){
- return $url . "?" . http_build_query($options);
- }
- return $url;
- }
-
- static private function optInit ( $options )
- {
- if( is_string( $options )){
- $optlists = Power::Normalize( $options );
- foreach( $optlists as $val){
- list($tmpKey,$tmpVal) = Power::Normalize( $val , "=");
- $opts[$tmpKey] = $tmpVal;
- }
- }else{
- $opts = $options;
- }
- //unset( $options );
- return $opts;
- }
- }
......虽然考虑了一些东西,但也仅仅是个很一般的解决方法