官方说: 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是什么意思呢?就是未经处理的,生的。就算是生肉把。
|