标签:parse_str

浏览模式: 标准 | 列表 | 图文

JS的几个简单互换[处理URL]

js没有parse_str这个函数,因此,对于querystring就要自己写了。
还好,在location这个对象里,对于querystring都是包含着的。于是乎就有了下面两个处理方式,很简单,没有做任何转换。。。只是演示而己

var param1 = 'name=123&psw=321&sex=男';
var param2 = {name: '123',psw: '321', sex: '男'};

从param1转为param2

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循环打印 param2
for(i in param2){
alert(i+' -- '+param2[i]);
}

从param2转为param1

var arr = [];
for(i in param2){
arr.push( i + "=" + param2[i]); //根据需要这里可以考虑escape之类的操作
}
alert(arr.join("&"))

当然应该有更好的办法,我这里只是简单处理一下

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

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

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

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

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

一是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处理起来非常简单,如下:

/* 将URL中的某参数设为某值*/ //【这一段就挺好啊】
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
/**
*使用例程:可用于分页类或页面中的替换等
$url = "add_jd.php?pid=4&tb=gm_jd&page=1";
echo( "原始的URL:" . $url );
echo( '<br/>' );
echo( "字符串参数:" . url::replace( $url , "pid=10,page=2") );
echo( '<br/>' );
echo( "数组型参数:" . url::replace( $url , array('pid'=>10,'page'=>5)) );
//echo( urlReplace( $url , array('pid'=>10,'page'=>5)) );
*/
/**
* url replace
* @param string $url 需要替换的URL字符串,一般为aaa.php?abc=def,也可以带上路径,象http://xxx.com/abc/def.php?aa=bb
* @param mixed $options 需要替换的变量,可以是字符串或数组,如果是字符串,格式为"aa=bb,cc=dd",有多个,用","隔开
* @return string $url 替换后的URL
*/
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 ){
//foreach ( $GET as $_k => $_v ){
// //if( array_key_exists( $_k , $options)){
// $GET[$_k] = $options[$_k];
// //}
//}
$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;
}
}
......虽然考虑了一些东西,但也仅仅是个很一般的解决方法