PHP的两个常用函数截取中文字符串无乱码与获取客户端IP地址
2016-08-31 09:35
1041 查看
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);
}
/*
* @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);
}
相关文章推荐
- PHP的两个常用函数截取中文字符串无乱码与获取客户端IP地址
- PHP中文字符串截取无乱码方法,php汉字截取函数_preg_split()
- 没事写了两个函数,php中gbk和utf-8中文无乱码截取
- PHP字符串截取函数(解决中文乱码问题!支持UTF-8和GB2312)
- PHP中的字符串截取函数,取子符串,以保证中文不出现乱码
- php截取中文字符串无乱码的函数(主函数:ord()、substr())
- php 字符串操作函数substr()截取中文子串乱码问题
- PHP截取字符串,获取长度,获取字符位置的函数 中文字符截取
- PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码,请写两个替代的函数实现兼容Unicode文字的字符串大小写转换
- PHP 中文字符串截取无乱码的方法以及php汉字截取函数_preg_split()
- php截取中文字符串长度的mb_substr()、mb_strcut()函数 附strlen/mb_strlen
- 如何利用PHP来截取一段中文字符串而不出现乱码
- 几个支持中文的PHP字符串截取函数
- PHP UTF-8字符串截断函数实现中文字符的无乱码截断
- 用PHP来截取中文字符串而不出现乱码的实现方法
- PHP获取客户端数据保存到MySQL数据库 出现中文乱码解决方案
- 【PHP】解决 php 截取字符串中文乱码问题
- 收藏几个支持中文的PHP字符串截取函数
- PHP截取字符串,获取长度,获取字符位置的函数
- PHP截取UTF-8字符串函数乱码解决方案【绝对好用】