·您当前的位置:首页 > 技术教程 > PHP教程 >

[PHP]PHP的escape函数和unescape函数源代码

时间:2014-07-15 15:34酷播
[PHP]PHP的escape函数和unescape函数源代码

[PHP]PHP的escape函数和unescape函数源代码

  1. //编码,编码后为小写 
  2. function escape($str){ 
  3. preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$newstr); 
  4. $ar = $newstr[0]; 
  5. foreach($ar as $k=>$v){ 
  6.    if(ord($ar[$k])>=127){ 
  7.     $tmpString=bin2hex(iconv("GBK","ucs-2//IGNORE",$v)); 
  8.     if (!eregi("WIN",PHP_OS)){ 
  9.      $tmpString = substr($tmpString,2,2).substr($tmpString,0,2); 
  10.     } 
  11.     $reString.="%u".$tmpString; 
  12.    }else{ 
  13.     $reString.rawurlencode($v); 
  14.    } 
  15. return $reString; 
  16.  
  17. //解码为HTML实体字符 
  18. function unescape ($source){ 
  19. $decodedStr = ""
  20. $pos = 0
  21. $len = strlen ($source); 
  22. while ($pos < $len){ 
  23.    $charAt = substr ($source, $pos, 1); 
  24.          if ($charAt == '%'){ 
  25.     $pos++; 
  26.     $charAt = substr ($source, $pos, 1); 
  27.              if ($charAt == 'u'){ 
  28.      // we got a unicode character 
  29.      $pos++; 
  30.      $unicodeHexVal = substr ($source, $pos, 4); 
  31.      $unicode = hexdec ($unicodeHexVal); 
  32.      $entity = "&#". $unicode . ';'; 
  33.      $decodedStr .utf8_encode ($entity); 
  34.      $pos += 4; 
  35.              }else{ 
  36.      // we have an escaped ascii character 
  37.      $hexVal = substr ($source, $pos, 2); 
  38.      $decodedStr .chr (hexdec ($hexVal)); 
  39.      $pos += 2; 
  40.     } 
  41.    }else{ 
  42.     $decodedStr .= $charAt; 
  43.     $pos++; 
  44.    } 
  45. return $decodedStr; 
  46.  
  47.  
  48. //直接解码为字符串。网上找到的这个版本的函数是解码为HTML实体字符,这是我修改的 
  49. function unescape($source){ 
  50. $decodedStr = ""
  51. $pos = 0
  52. $len = strlen ($source); 
  53. while ($pos < $len){ 
  54.    $charAt = substr ($source, $pos, 1); 
  55.          if ($charAt == '%'){ 
  56.     $pos++; 
  57.     $charAt = substr ($source, $pos, 1); 
  58.              if ($charAt == 'u'){ 
  59.      // we got a unicode character 
  60.      $pos++; 
  61.      $unicodeHexVal = substr ($source, $pos, 4); 
  62.      $unicode = hexdec ($unicodeHexVal); 
  63.      $decodedStr .u2utf82gb($unicode); 
  64.      $pos += 4; 
  65.              }else{ 
  66.      // we have an escaped ascii character 
  67.      $hexVal = substr ($source, $pos, 2); 
  68.      $decodedStr .chr (hexdec ($hexVal)); 
  69.      $pos += 2; 
  70.     } 
  71.    }else{ 
  72.     $decodedStr .= $charAt; 
  73.     $pos++; 
  74.    } 
  75. return $decodedStr; 
  76. function u2utf82gb($c){ 
  77. $strphp = ""
  78. if($c < 0x80){ 
  79.    $strphp .= $c; 
  80. }elseif($c < 0x800){ 
  81.    $strphp .chr(0xC0 | $c>>6); 
  82.    $strphp .chr(0x80 | $c & 0x3F); 
  83. }elseif($c < 0x10000){ 
  84.    $strphp .chr(0xE0 | $c>>12); 
  85.    $strphp .chr(0x80 | $c>>6 & 0x3F); 
  86.    $strphp .chr(0x80 | $c & 0x3F); 
  87. }elseif($c < 0x200000){ 
  88.    $strphp .chr(0xF0 | $c>>18); 
  89.    $strphp .chr(0x80 | $c>>12 & 0x3F); 
  90.    $strphp .chr(0x80 | $c>>6 & 0x3F); 
  91.    $strphp .chr(0x80 | $c & 0x3F); 
  92. return iconv('UTF-8', 'GB2312', $strphp); 

 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器