php 对于utf-8 格式下 substr出现截取乱码的处理
2013-08-26 21:28
381 查看
现在大部分编程环境及文件格式都是utf-8编码的
在使用php的substr方法截取某个带中文的string时,会发生截取错误(因为一个中文长度为3)
utf8RTrim方法可以使截取后的字符串恢复正常
public utf8RTrim ( $str ) {
if ( $str == null ) {
return "";
}
$new = "";
$pos = 0;
$len = strlen($str);
while ( $pos < $len ) {
$ch = ord($str[$pos]);
$mask = $ch & 0xf0;
if ( $mask == 0xf0 ) {
$pos += 4;
} elseif ( $mask == 0xe0 ) {
$pos += 3;
} elseif ( $mask == 0xc0 ) {
$pos += 2;
} else {
$pos ++;
}
if ( $pos - 1 < $len ) {
$last = $pos - 1;
}
}
if ( $last + 1 >= 0 ) {
$new = substr($str, 0, $last + 1);
}
return $new;
}
例子:
$str = "hello你好";
echo utf8RTrim(substr($str, 0, 6)); // hello
echo utf8RTrim(substr($str, 0,8)); // hello你
在使用php的substr方法截取某个带中文的string时,会发生截取错误(因为一个中文长度为3)
utf8RTrim方法可以使截取后的字符串恢复正常
public utf8RTrim ( $str ) {
if ( $str == null ) {
return "";
}
$new = "";
$pos = 0;
$len = strlen($str);
while ( $pos < $len ) {
$ch = ord($str[$pos]);
$mask = $ch & 0xf0;
if ( $mask == 0xf0 ) {
$pos += 4;
} elseif ( $mask == 0xe0 ) {
$pos += 3;
} elseif ( $mask == 0xc0 ) {
$pos += 2;
} else {
$pos ++;
}
if ( $pos - 1 < $len ) {
$last = $pos - 1;
}
}
if ( $last + 1 >= 0 ) {
$new = substr($str, 0, $last + 1);
}
return $new;
}
例子:
$str = "hello你好";
echo utf8RTrim(substr($str, 0, 6)); // hello
echo utf8RTrim(substr($str, 0,8)); // hello你
相关文章推荐
- PHP用substr截取字符串出现中文乱码问题用mb_substr
- PHP substr截取中文字符出现乱码的问题解疑
- php怎么处理截取字符串出现的乱码问题
- 解析使用substr截取UTF-8中文字符串出现乱码的问题
- PHP中处理截取汉字,出现乱码问题的2个类
- PHP substr截取中文字符出现乱码的问题解疑
- Web_PHP_PHPsubstr截取中文字符出现乱码解决;
- PHP substr()截取字符串时,中文出现乱码的问题解决【转】
- PHP中使用substr()截取字符串出现中文乱码问题该怎么办
- PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
- PHP中处理截取汉字,出现乱码问题的2个类
- 分析substr来截取UTF-8中文字符串出现乱码问题
- PHP中使用substr()截取字符串出现中文乱码问题该怎么办
- PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
- php怎么处理截取字符串出现的乱码问题
- PHP substr截取中文字符出现乱码的具体解决办法
- PHP中处理截取汉字,出现乱码问题的2个类
- 解析使用substr截取UTF-8中文字符串出现乱码的问题
- 在php中使用mb_substr($row['title'],0,15,'utf-8')解决获取的字符后面几们的乱码问题
- PHP函数substr截取中文字符出现乱码的解决办法