php 编码转换程序代码

function phpUnescape_no($source) {
    $decodedStr = "";
    $pos = 0;
    $len = strlen ($source);
    while ($pos < $len) {
        $charAt = substr ($source, $pos, 1);
        if ($charAt == '%') {
            $pos++;
            $charAt = substr ($source, $pos, 1);
            if ($charAt == 'u') {
                // we got a unicode character
                $pos++;
                $unicodeHexVal = substr ($source, $pos, 4);
                $unicode = hexdec ($unicodeHexVal);
                $entity = "&#". $unicode . ';';
                $decodedStr .= utf8_encode ($entity);
                $pos += 4;
            }
            else {
                // we have an escaped ascii character
                $hexVal = substr ($source, $pos, 2);
                $decodedStr .= chr (hexdec ($hexVal));
                $pos += 2;
            }
        } else {
            $decodedStr .= $charAt;
            $pos++;
        }
    }
    return $decodedStr;
}

 

//////////////////////////////////////////////////////////////////////

function phpUnescape($escstr){
  preg_match_all("/%u[0-9A-Za-z]{4}|%.{2}|*|[0-9a-zA-Z.+-_]+/",$escstr,$matches); //prt($matches);
  $ar = &$matches[0];
  $c = "";
  foreach($ar as $val){
  if (substr($val,0,1)!="%") { //如果是字母数字+-_.的ascii码
      $c .=$val;
  }
  elseif (substr($val,1,1)!="u") { //如果是非字母数字+-_.的ascii码
    $x = hexdec(substr($val,1,2));
      $c .=chr($x);
  }
  else { //如果是大于0xFF的码
    $val = intval(substr($val,2),16);
    if($val < 0x7F){        // 0000-007F
      $c .= chr($val);
    }elseif($val < 0x800) { // 0080-0800
      $c .= chr(0xC0 | ($val / 64));
      $c .= chr(0x80 | ($val % 64));
    }else{                // 0800-FFFF
       $c .= chr(0xE0 | (($val / 64) / 64));
       $c .= chr(0x80 | (($val / 64) % 64));
       $c .= chr(0x80 | ($val % 64));
     }
  }
  }
  return UTFtoGBK($c);
}

function UTFtoGBK($CS){
 $CodeObj = new Chinese("UTF8","GBK");
 return $CodeObj ->Convert($CS);
}

function phpEscape($str){
 $returnStr = "";
 if (@function_exists('mb_convert_encoding')){
  $returnStr = phpEscape_yes($str);
 }
 else{
  $returnStr = phpEscape_no($str);
 }
 return $returnStr;
}

function phpEscape_yes($string, $encoding = 'GBK') {
  $return = '';

  for ($x = 0; $x < mb_strlen($string, $encoding); $x ++) {
    $str = mb_substr($string, $x, 1, $encoding);
    if (strlen($str) > 1) {
      $return .= '%u' . strtoupper(bin2hex(mb_convert_encoding($str, 'UCS-2', $encoding)));
    } else {
      $return .= '%' . strtoupper(bin2hex($str));
    }
  }
  return $return;
}

function phpEscape_no($str){
    preg_match_all("/[x80-xff].|[x01-x7f]+/",$str,$newstr);
    $ar = $newstr[0];
    foreach($ar as $k=>$v){
        if(ord($ar[$k])>=127){
   $tmpString=bin2hex(GBKtoUCS2($v));
            if (!eregi("WIN",PHP_OS)){
                $tmpString = substr($tmpString,2,2).substr($tmpString,0,2);
            }
            $reString.="%u".$tmpString;
        } else {
            $reString.= rawurlencode($v);
        }
    }
    return $reString;
}

function GBKtoUCS2($CS){
 $CodeObj = new Chinese("GBK","UTF8");
 return utf8ToUnicode($CodeObj ->Convert($CS));
}

function utf8ToUnicode($str,$order="big")
{
  $ucs2string ="";
    $n=strlen($str);
    for ($i=0;$i<$n ;$i++ ) {
  $v = $str[$i];
  $ord = ord($v);
  if( $ord<=0x7F){ //  0xxxxxxx 
     if ($order=="little") {
       $ucs2string .= $v.chr(0);
   }
   else {
       $ucs2string .= chr(0).$v;
   }
  }
  elseif ($ord<0xE0 && ord($str[$i+1])>=0x80) {  //110xxxxx 10xxxxxx
   $a = (ord($str[$i]) & 0x3F )<<6;
   $b =  ord($str[$i+1]) & 0x3F ;
   $ucsCode = dechex($a+$b);   //echot($ucsCode);
   $h = intval(substr($ucsCode,0,2),16);
   $l  =  intval(substr($ucsCode,2,2),16);
   if ($order=="little") {
       $ucs2string   .= chr($l).chr($h);
   }
   else {
        $ucs2string   .= chr($h).chr($l);
   }
   $i++;
  }elseif ($ord<0xF0  && ord($str[$i+1])>=0x80  && ord($str[$i+2])>=0x80) { //1110xxxx 10xxxxxx 10xxxxxx
      $a = (ord($str[$i]) & 0x1F)<<12;    
   $b = (ord($str[$i+1]) & 0x3F )<<6;
   $c =  ord($str[$i+2]) & 0x3F ;
   $ucsCode = dechex($a+$b+$c);   //echot($ucsCode);
   $h = intval(substr($ucsCode,0,2),16);
   $l  =  intval(substr($ucsCode,2,2),16);
   if ($order=="little") {
       $ucs2string   .= chr($l).chr($h);
   }
   else {
        $ucs2string   .= chr($h).chr($l);
   }  
   $i +=2;
  }
    }
 return $ucs2string;  
}

////////////////////////////////////////////////////////

function unescapeFuncMake($Txt){
 if ($Txt[2]!="*") return $Txt;
 $ETxt = "";
    $MTxt = "egy+nb@QwXvCWjKPRxVzDl/h7EOMtSa9f6*FpNr81i_0kqdG2LBcuZIAJYo34m-sT%5.UH3SYZ0hzt/y@qDTNECf1BpujiO.X6ks+oIR8GPVg9wbm%xJvKLWrn*F4HAe-QladM27Uc5_";
 $TTxtnum = substr($Txt,0,2);
 $TTxt = substr((substr($MTxt,70).substr($MTxt,70)),$TTxtnum);
 for ($ii=3; $ii<strlen($Txt); $ii++){
  $w = ($ii-3)%10;
  $k = strpos($TTxt,$Txt[$ii],$w)-$w;
  $ETxt .= $MTxt[$k];
 }
 return phpUnescape($ETxt);
}

 

function escapeFuncMake($Txt){
 if ($Txt=="" || $Txt[2]=="*") return $Txt;
 $MTxt = "egy+nb@QwXvCWjKPRxVzDl/h7EOMtSa9f6*FpNr81i_0kqdG2LBcuZIAJYo34m-sT%5.UH3SYZ0hzt/y@qDTNECf1BpujiO.X6ks+oIR8GPVg9wbm%xJvKLWrn*F4HAe-QladM27Uc5_";
 $BTxt = phpEscape($Txt);
 $TTxt = floor(mt_rand(0,50));
 $ETxt = $TTxt.($TTxt>9?"*":"**");
 for ($ii=0; $ii<strlen($BTxt); $ii++){
  $k = strpos($MTxt,$BTxt[$ii])+($ii%10);
  $ETxtstr = substr((substr($MTxt,70).substr($MTxt,70)),$TTxt);
  $ETxt .= $ETxtstr[$k];
 }
 return $ETxt;
}

时间: 2024-08-31 12:48:54

php 编码转换程序代码的相关文章

java字符串编码转换程序代码

1.当前流行的字符编码格式有:US-ASCII.ISO-8859-1.UTF-8.UTF-16BE.UTF-16LE.UTF-16.GBK.GB2312等,其 中GBK.GB2312是专门处理中文编码的. 2.String的getBytes方法用于按指定编码获取字符串的字节数组,参数指定了解码格式,如果没有指定解码格式,则 按系统默认编码格式. 3.String的"String(bytes[] bs, String charset)"构造方法用于把字节数组按指定的格式组合成一个字符串对

UTF-8 Unicode Ansi 汉字GB2321几种编码转换程序_应用技巧

今天搞sxna,遇到了编码转换的难题,搞了一个多小时,历尽千辛万苦,总算总结了如下的汉字转换为各种UTF-8 Unicode Ansi编码的程序.不敢独享,特此奉献给各位编程爱好者! -------------------------------------------------------------------------------- 符合GOOGLE的UTF编码  汉字 经过encodeURIComponent变成 %E6%B1%89%E5%AD%97  %E6%B1%89%E5%AD

UTF-8 Unicode Ansi 汉字GB2321几种编码转换程序

今天搞sxna,遇到了编码转换的难题,搞了一个多小时,历尽千辛万苦,总算总结了如下的汉字转换为各种UTF-8 Unicode Ansi编码的程序.不敢独享,特此奉献给各位编程爱好者! -------------------------------------------------------------------------------- 符合GOOGLE的UTF编码  汉字 经过encodeURIComponent变成 %E6%B1%89%E5%AD%97 %E6%B1%89%E5%AD%

js Unicode编码转换程序

js Unicode编码转换程序 /*  *js Unicode编码转换  */ var decToHex = function(str) {     var res=[];     for(var i=0;i < str.length;i++)         res[i]=("00"+str.charCodeAt(i).toString(16)).slice(-4);     return "\u"+res.join("\u"); }

javascript中加密编码算法代码

一:UTF8编码函数  代码如下 复制代码 function URLEncode(Str){ if(Str==null||Str=="") return ""; var newStr=""; function toCase(sStr){ return sStr.toString(16).toUpperCase(); } for(var i=0,icode,len=Str.length;i<len;i++){ icode=Str.charCo

JScript中使用ADODB.Stream判断文件编码的代码_javascript技巧

一开始使用ASCII编码来读取文本数据,模拟读取二进制数据,但是发现如果字符编码大于127时,只会得到小于128的值,相当于和128取余了,因此ASCII编码是不行的. 继续寻找,在CodeProejct.com找到一篇文章<Reading And Writing Binary Files Using JScript>,里面刚好有我需要的内容. 其实说来也简单,就是把编码换一下,使用437,这个是IBM扩展过的ASCII编码,把ASCII编码的最高位也利用起来,将字符集中的字符从128个扩展到

Javascript base64编码实现代码_javascript技巧

复制代码 代码如下: /* * base64编码 */ var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var base64DecodeChars = new Array( -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1

基于Snoopy的PHP近似完美获取网站编码的代码_php实例

先要到网上下载Snoopy.class.php 调用方法: 复制代码 代码如下: <?php require 'lib/Snoopy.class.php'; require 'lib/WebCrawl.class.php';//包含下面代码 $go=new WebCrawl('http://www.baidu.com'); echo $go->getCharset(); ?> 复制代码 代码如下: <?php class WebCrawl { private $url; priva

php 中文和编码判断代码_php技巧

编码范围1. GBK (GB2312/GB18030) \x00-\xff GBK双字节编码范围 \x20-\x7f ASCII \xa1-\xff 中文 \x80-\xff 中文 2. UTF-8 (Unicode) \u4e00-\u9fa5 (中文) \x3130-\x318F (韩文 \xAC00-\xD7A3 (韩文) \u0800-\u4e00 (日文) ps: 韩文是大于[\u9fa5]的字符 正则例子: preg_replace("/([\x80-\xff])/",&q