/**
* 字符串转十六进制
* @param unknown_type $s
*/

function str2hex($s) {
  $r = "";
  $hexes = array ( "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f");
   for ($i=0; $i<strlen($s); $i++)
  $r .= ($hexes [(ord($s{$i}) >> 4)] . $hexes [(ord($s{$i}) & 0xf)]);
   return $r;
}

/**
* 十六进制转字符串
* @param unknown_type $s
*/

function hex2str($s) {
  $r = "";
   for ( $i = 0; $i<strlen($s); $i += 2)
  {
    $x1 = ord($s{$i});
    $x1 = ($x1>=48 && $x1<58) ? $x1-48 : $x1-97+10;
    $x2 = ord($s{$i+1});
    $x2 = ($x2>=48 && $x2<58) ? $x2-48 : $x2-97+10;
    $r .= chr((($x1 << 4) & 0xf0) | ($x2 & 0x0f));
  }
   return $r;
}

/**
* 返回经addslashes处理过的字符串或数组
* @param $string 需要处理的字符串或数组
* @return mixed
*/

function new_addslashes($string){
   if(!is_array($string)) return addslashes($string);
  foreach($string as $key => $val) $string[$key] = new_addslashes($val);
   return $string;
}

/**/
function addslashes_deep($string)
{
   return is_array($string) ? array_map('addslashes_deep', $string) : addslashes($string);
}

/**
* 返回经stripslashes处理过的字符串或数组
* @param $string 需要处理的字符串或数组
* @return mixed
*/

function new_stripslashes($string) {
   if(!is_array($string)) return stripslashes($string);
  foreach($string as $key => $val) $string[$key] = new_stripslashes($val);
   return $string;
}
/**/
function stripslashes_deep($string)
{
   return is_array($string) ? array_map('stripslashes_deep', $string) : stripslashes($string);
}

/**
* 返回经addslashe处理过的字符串或数组
* @param $string 需要处理的字符串或数组
* @return mixed
*/

function new_html_special_chars($string) {
   if(!is_array($string)) return htmlspecialchars($string);
  foreach($string as $key => $val) $string[$key] = new_html_special_chars($val);
   return $string;
}

InBlock.gif /**
InBlock.gif * 获取请求ip
InBlock.gif *
InBlock.gif * @return ip地址
InBlock.gif */

InBlock.giffunction ip() {
InBlock.gif   if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
InBlock.gif    $ip = getenv('HTTP_CLIENT_IP');
InBlock.gif  } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
InBlock.gif    $ip = getenv('HTTP_X_FORWARDED_FOR');
InBlock.gif  } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
InBlock.gif    $ip = getenv('REMOTE_ADDR');
InBlock.gif  } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
InBlock.gif    $ip = $_SERVER['REMOTE_ADDR'];
InBlock.gif  }
InBlock.gif   return preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
InBlock.gif}

/**
* 字符截取 支持UTF8/GBK
* @param $string
* @param $length
* @param $dot
*/

function str_cut($string, $length, $dot = '...') {
  $strlen = strlen($string);
   if($strlen <= $length) return $string;
  $string = str_replace(array(' ',' ', '&', ' "', ''', '“', '”', '—', '<', '>', '·', '…'), array('∵',' ', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), $string);
  $strcut = '';
   if(strtolower(CHARSET) == 'utf-8') {
    $length = intval($length-strlen($dot)-$length/3);
    $n = $tn = $noc = 0;
     while($n < strlen($string)) {
      $t = ord($string[$n]);
       if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
        $tn = 1; $n++; $noc++;
      } elseif(194 <= $t && $t <= 223) {
        $tn = 2; $n += 2; $noc += 2;
      } elseif(224 <= $t && $t <= 239) {
        $tn = 3; $n += 3; $noc += 2;
      } elseif(240 <= $t && $t <= 247) {
        $tn = 4; $n += 4; $noc += 2;
      } elseif(248 <= $t && $t <= 251) {
        $tn = 5; $n += 5; $noc += 2;
      } elseif($t == 252 || $t == 253) {
        $tn = 6; $n += 6; $noc += 2;
      } else {
        $n++;
      }
       if($noc >= $length) {
         break;
      }
    }
     if($noc > $length) {
      $n -= $tn;
    }
    $strcut = substr($string, 0, $n);
    $strcut = str_replace(array('∵', '&', ' "', "' ", '“', '”', '—', '<', '>', '·', '…'), array(' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), $strcut);
  } else {
    $dotlen = strlen($dot);
    $maxi = $length - $dotlen - 1;
    $current_str = '';
    $search_arr = array('&',' ', ' "', "'", '“', '”', '—', '<', '>', '·', '…','∵');
    $replace_arr = array('&',' ', '"', ''', '“', '”', '—', '<', '>', '·', '…',' ');
    $search_flip = array_flip($search_arr);
     for ($i = 0; $i < $maxi; $i++) {
      $current_str = ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
       if (in_array($current_str, $search_arr)) {
        $key = $search_flip[$current_str];
        $current_str = str_replace($search_arr[$key], $replace_arr[$key], $current_str);
      }
      $strcut .= $current_str;
    }
  }
   return $strcut.$dot;
}


/**
* 产生随机字符串
*
* @param        int                $length    输出长度
* @param        string         $chars     可选的 ,默认为 0123456789
* @return     string         字符串
*/

function random($length, $chars = '0123456789') {
  $hash = '';
  $max = strlen($chars) - 1;
   for($i = 0; $i < $length; $i++) {
    $hash .= $chars[mt_rand(0, $max)];
  }
   return $hash;
}

/**
* 将字符串转换为数组
*
* @param  string  $data  字符串
* @return  array  返回数组格式,如果,data为空,则返回空数组
*/

function string2array($data) {
   if($data == '') return array();
  eval( "\$array = $data;");
   return $array;
}

/**
* 将数组转换为字符串
*
* @param  array  $data    数组
* @param  bool  $isformdata  如果为0,则不使用new_stripslashes处理,可选参数,默认为1
* @return  string  返回字符串,如果,data为空,则返回空
*/

function array2string($data, $isformdata = 1) {
   if($data == '') return '';
   if($isformdata) $data = new_stripslashes($data);
   return addslashes(var_export($data, TRUE));
}

/**
* 转换字节数为其他单位
*
*
* @param        string        $filesize        字节大小
* @return        string        返回大小
*/

function sizecount($filesize) {
         if ($filesize >= 1073741824) {
                $filesize = round($filesize / 1073741824 * 100) / 100 .' GB';
        } elseif ($filesize >= 1048576) {
                $filesize = round($filesize / 1048576 * 100) / 100 .' MB';
        } elseif($filesize >= 1024) {
                $filesize = round($filesize / 1024 * 100) / 100 . ' KB';
        } else {
                $filesize = $filesize.' Bytes';
        }
         return $filesize;
}