在GB编码下,可以用
$str = "中";
if(ord($str[$i])>0x80) echo "是中文";
那在UTF8编码下,有没有类似的方法实现呢
$str = "中";
if(ord($str[$i])>0x80) echo "是中文";
那在UTF8编码下,有没有类似的方法实现呢
解决方案 »
- 问一下,js对话框组件有哪些?哪个与php的兼容最好?
- 问个简单的PHP参数传递的问题。。。
- PHP header跳转页面是如何修改Referer
- 能用ajax以POST实现文件上传吗?也就是能不能实现:<form action="" method="post" enctype="multipart/form-data" name="File">的功能?
- 个关于文件存放方式的问题
- 问个关于smarty的问题?
- 求一递归函数
- 在做mysql查询时 需要列的一部分怎么做啊?
- PHP+Mysql的复杂问题,低手免进!!!!
- 好问题
- php再次时间问题求助
- zend studio里面怎样将字体放大点?
所以第一个字节是1110开头,也就是>0xE0当然,3个字节的不全是中文,但是如果你的应用不是世界各国的字符都用的话,
一般也就没问题了
function is_utf8($string)
{
return preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs', $string);
}
{
return preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs', $string);
}上面的怎么被截断了。
* 中文字符串截取(3)(支持GB2312/GBK/UTF-8/BIG5)
* @param string $str 要截取的字串
* @param int $start 截取起始位置
* @param int $length 截取长度
* @param string $charset 字符串的字符集,包括有 utf-8|gb2312|gbk|big5 编码
* @param bool $suffix 是否加尾缀
* @return string 返回接续字符串的结果
****************************************/
function CSubstr($str, $start=0, $length, $charset="utf-8", $suffix=false){
if(function_exists("mb_substr")){
return mb_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));
if($suffix) {
return $slice ."…";
}
return $slice;
}