首页 > 其他 > 网站日记>正文

php函数重写之urlencode和rawurlencode

提示: 阅读权限:公开  

官方说:

urlencode是一个函数,可将字符串以URL编码,用于编码处理。

URL编码(URL encoding),也称作百分号编码(Percent-encoding), 是特定上下文的统一资源定位符 (URL)的编码机制。

适用于统一资源标识符(URI)的编码,也用于为"application/x-www-form-urlencoded" MIME准备数据, 因为它用于通过HTTP的请求操作(request)提交HTML表单数据。


那么具体是如下实现的呢?自己做一个,就印象最深刻了。

$str='//我们_是 个孩子+-*/';
 echo  rawurlencode($str);
 echo  chr(13).chr(10);
 echo jhcencode($str);
 function jhcencode($str){
     $jg='';
     mb_internal_encoding('utf8');
     $len=mb_strlen($str);
     for($i=0;$i<$len;$i++){
         $c=mb_substr($str,$i,1);
         if($c==' '){
		 	$jg.='+';
		 }elseif(preg_match('/[0-9a-zA-Z-_.]/',$c)){
			 $jg.=$c;
		 }else{
		 
              $jg.='%'.trim(chunk_split(strtoupper(bin2hex($c)),2,'%'),'%'); 
         }
     }
    return $jg;
 }

可见,字母数字和三个大神(-_.)不用变,空格变加号(+),其他的做十六进制处理。

而rawurlencode,只是取消了空格的特权,规则为:字母数字和三个大神(-_.)不用变,其他的做十六进制处理。

所以呢,空格就变成%20,而不是+号了。可以这样实现:

function rawjhcencode($str){
     $jg='';
     mb_internal_encoding('utf8');
     $len=mb_strlen($str);
     for($i=0;$i<$len;$i++){
         $c=mb_substr($str,$i,1);
       if(preg_match('/[0-9a-zA-Z-_.]/',$c)){
		 $jg.=$c;
	}else{
		 
            $jg.='%'.trim(chunk_split(strtoupper(bin2hex($c)),2,'%'),'%'); 
         }
     }
    return $jg;
 }

raw是什么意思呢?就是未经处理的,生的。就算是生肉把。

上一篇:帝国cms中已知模型id求所在的数据表名

下一篇:在帝国cms中对取出的数据自定义排序

tags: php php函数 urlencode

返回首页

相关

热门

站内直通车

[!--temp.bottomnav--]
返回顶部