PHP中对于URL进行编码,可以使用 urlencode() 或者 rawurlencode(),二者的区别是前者把空格编码为 '+',而后者把空格编码为 '%20',不过应该注意的是,在编码时应该只对部分URL编码,否则URL中的冒号和反斜杠也会被转义。下面是详细解释:
| 
 1 
 | 
string urlencode( string str) | 
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。
例子 1 :urlencode函数与rawurlencode函数区别
| 
 1 
2 
3 
4 
 | 
$str = '博 客' ;echo  urlencode( $str );echo  "<br>" ;echo  rawurlencode( $str ); | 
url结果:
| 
 1 
2 
 | 
%B2%A9+%BF%CD%B2%A9%20%BF%CD | 
 例子 2 :url中文编码方法
 从url:"http://www.baidu.com/s?wd=博 客" 转为 url:"http://www.baidu.com/s?wd=%E5%8D%9A%20%E5%AE%A2";
| 
 
       1
      
       2
      
       3
      
       4
      
  | 
$url
       =
       'http://www.baidu.com/s?wd=博 客'
       ;
      $arr
       =
       explode
       (
       '='
       ,
       $url
       );
      $url
       =
       $arr
       [0].
       '='
       .rawurlencode(
       $arr
       [1]);
      echo 
       $url
       ;
       | 
 
   
结果:
http://www.baidu.com/s?wd=%E5%8D%9A%20%E5%AE%A2
或许用以下url编码函数
| 
 
       1
      
       2
      
       3
      
       4
      
       5
      
       6
      
       7
      
       8
      
       9
      
       10
      
       11
      
       12
      
  | 
function 
       cn_urlencode(
       $url
       ){
           
       $pregstr 
       = 
       "/[\x{4e00}-\x{9fa5}]+/u"
       ;
       //UTF-8中文正则
          
       if
       (preg_match_all(
       $pregstr
       ,
       $url
       ,
       $matchArray
       )){
       //匹配中文,返回数组
              
       foreach
       (
       $matchArray
       [0] 
       as 
       $key
       =>
       $val
       ){
                  
       $url
       =
       str_replace
       (
       $val
       , urlencode(
       $val
       ), 
       $url
       );
       //将转译替换中文
              
       }
              
       if
       (
       strpos
       (
       $url
       ,
       ' '
       )){
       //若存在空格
                  
       $url
       =
       str_replace
       (
       ' '
       ,
       '%20'
       ,
       $url
       );
              
       }
          
       }
          
       return 
       $url
       ;
      }
       | 
 
   
url结果:
http://www.baidu.com/s?wd=%E5%8D%9A%20%E5%AE%A2
                    
                
                
            
        
浙公网安备 33010602011771号