一些php项目中比较通用的php自建函数的详解(2)


/**
* 字符串转十六进制
* @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; 
}


5.十六进制转字符串

复制代码 代码如下:


/**
* 十六进制转字符串
* @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; 


6.返回经addslashes处理过的字符串或数组

复制代码 代码如下:


/**
* 返回经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); 


7.返回经stripslashes处理过的字符串或数组

复制代码 代码如下:


/**
* 返回经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); 


8.返回经 htmlspecialchars 处理过的字符串或数组

复制代码 代码如下:


/**
* 返回经 htmlspecialchars 处理过的字符串或数组
* @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; 


9.获取请求ip

复制代码 代码如下:


/**
 * 获取请求ip
 *
 * @return ip地址
 */ 
function ip() { 
  if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { 
    $ip = getenv('HTTP_CLIENT_IP'); 
  } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { 
    $ip = getenv('HTTP_X_FORWARDED_FOR'); 
  } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { 
    $ip = getenv('REMOTE_ADDR'); 
  } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { 
    $ip = $_SERVER['REMOTE_ADDR']; 
  } 
  return preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : ''; 


10.字符截取 支持UTF8/GBK

复制代码 代码如下:


/**
* 字符截取 支持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; 


11.产生随机字符串

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/d427c1ab3ab468977b331c36fe94741a.html