PHP的两个常用函数截取中文字符串无乱码与获取客户端IP地址

3/3/2017来源:C/C++教程人气:1707

        1.截取中文字符无乱码支持UTF-8、GBK等编码,原理就是判断是否有可用扩展,如果有扩展则使用扩展函数,没有扩展根据中文的ASCII码进行匹配。

        /*

         * @param string $str 需要转换的字符串          * @param string $start 开始位置          * @param string $length 截取长度          * @param string $charset 编码格式

        */

function msubstr($str, $start=0, $length, $charset="utf-8")  {     if(function_exists("mb_substr"))         return mb_substr($str, $start, $length, $charset);     elseif(function_exists('iconv_substr')) {         return iconv_substr($str,$start,$length,$charset);     }     $re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";     $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";     $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";     $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";     PReg_match_all($re[$charset], $str, $match);     $slice = join("",array_slice($match[0], $start, $length));     return $slice; }

        2.获取客户端ip地址

        

function get_client_ip(){   if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))       $ip = getenv("HTTP_CLIENT_IP");   else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))       $ip = getenv("HTTP_X_FORWARDED_FOR");   else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))       $ip = getenv("REMOTE_ADDR");   else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))       $ip = $_SERVER['REMOTE_ADDR'];   else       $ip = "unknown";   return($ip);}