utf8截取无乱码
来源:互联网 发布:手机淘宝 尺码助手 编辑:程序博客网 时间:2024/05/16 07:49
要知道怎么截取UTF8无乱码,我们首先要知道UTF8是怎么编码的,百度了一下,得出以下码表
Unicode/UCS-4
bit数
UTF-8
byte数
备注
0000 ~
007F
0~7
0XXX XXXX
1
0080 ~
07FF
8~11
110X XXXX
2
0800 ~
FFFF
12~16
1110XXXX
3
基本定义范围:0~FFFF
1 0000 ~
1F FFFF
17~21
1111 0XXX
4
Unicode6.1定义范围:0~10 FFFF
20 0000 ~
3FF FFFF
22~26
1111 10XX
5
说明:此非unicode编码范围,属于UCS-4 编码
早期的规范UTF-8可以到达6字节序列,可以覆盖到31位元(通用字符集原来的极限)。尽管如此,2003年11 月UTF-8 被 RFC3629 重新规范,只能使用原来Unicode定义的区域, U+0000到U+10FFFF。根据规范,这些字节值将无法出现在合法UTF-8序列中
400 0000 ~
7FFF FFFF
27~31
1111 110X
6
看起来很复杂,其实就很简单,utf8编码究竟是多少个字节组成一个字符,主要是看字符的第一个字节,至于第一个字节是什么样对应截取多少个就参照上表了,但是还有一个问题,就是究竟要怎么判断,其实只要截取第一个字节出来,位运算一次就可以了,具体代码如下
function getUTF8($str,$len){ if($len <= 0){ return ''; } $temp = ''; for($i=0,$j=0;$i<$len;$i++){ $str1 = ord(substr($str,$j,1)); if(($str1 & bindec('11111110')) == bindec('11111100')){ //截取6 $temp .= substr($str,$j,6); $j = $j + 6; }elseif(($str1 & bindec('11111100')) == bindec('11111000')){ //截取5 $temp .= substr($str,$j,5); $j = $j + 5; }elseif(($str1 & bindec('11111000')) == bindec('11110000')){ //截取4 $temp .= substr($str,$j,4); $j = $j + 4; }elseif(($str1 & bindec('11110000')) == bindec('11100000')){ //截取3 $temp .= substr($str,$j,3); $j = $j + 3; }elseif(($str1 & bindec('11100000')) == bindec('11000000')){ //截取2 $temp .= substr($str,$j,2); $j = $j + 2; }else{ //截取1 $temp .= substr($str,$j,1); $j = $j + 1; } } return $temp;}
0 0
- utf8截取无乱码
- php 截取utf8 无乱码
- lua中截取UTF8字符串的方法(无乱码)
- lua中截取UTF8字符串的方法(无乱码)
- DataTable2Excel无乱码(UTF8)
- 无乱码截取
- 中文截取无乱码
- php截取字符串可以避免乱码 utf8
- gb2312汉字截取乱码 UTF8 中文乱码 汉字截取乱码 PHP截取汉字乱码
- php截取中文无乱码
- PHP截取中文无乱码
- 截取内容无乱码函数
- PHP 中英文截取无乱码
- PHP字符串截取,无乱码
- 中英文截取字符串无乱码
- php中文截取无乱码
- PHP 中文无乱码截取
- 3.无乱码截取字符串
- PHP中获取当前页面的完整URL
- 传话游戏
- c++ struct, union,enum,typedef
- 第六周作业1——利用哈夫曼编码英文字母表
- 语言模型n-gram
- utf8截取无乱码
- PHP数组排序
- http的安全方法和幂等性
- Android 四大组件生命周期:ContentProvider
- 关于分词sphinx和cookindex的简单记录
- struts2第一个应用
- Android的自动化测试四: 百度的mtc脚本录制工具的使用
- poj 3061
- 关于jvm中字符串的编码解码导致的乱码问题