UTF-8的中文字符串是三个字节
<?
php
// 编码UTF-8
echo strlen ( ' 测试文字a测试文字 ' );
echo ' - ' ;
echo mb_strlen( ' 测试文字a测试文字 ' , ' utf-8 ' );
?>
// 编码UTF-8
echo strlen ( ' 测试文字a测试文字 ' );
echo ' - ' ;
echo mb_strlen( ' 测试文字a测试文字 ' , ' utf-8 ' );
?>
输出:25-9
GB2312的中文字符串是二个字节
<?
php
// 编码GB2312
echo strlen ( ' 测试文字a测试文字 ' );
echo ' - ' ;
echo mb_strlen( ' 测试文字a测试文字 ' , ' Gb2312 ' );
?>
// 编码GB2312
echo strlen ( ' 测试文字a测试文字 ' );
echo ' - ' ;
echo mb_strlen( ' 测试文字a测试文字 ' , ' Gb2312 ' );
?>
输出:17-9
在Mysql数据库(5.1以后的版本)中,如果字段类型为varchar(10)则可插入10个字符(不是字节);
所以在判断字符串的长度时需要根据文档编码来区分。
符一个简单的UTF-8下字符串截取(按字符个数截取)
<?
/*
* UTF-8字符串截取
* $str 要截取的字串
* $start 截取起始位置
* $length 截取长度
*/
function cutStr( $str , $start , $length ) {
$restr = '' ;
$j = 0 ;
$end = $length + $start - 1 ;
$plen = strlen ( $str );
for ( $i = 0 ; $i < $plen ; $i ++ ) {
$restr .= ord ( $str [ $i ]) > 127 ? $str [ $i ] . $str [ ++ $i ] . $str [ ++ $i ] : $str [ $i ];
$j ++ ;
if ( $j < $start ){ $restr = '' ;}
if ( $j >= $end ){ break ;}
}
$restr .= '' ;
return $restr ;
}
$str = ' 中新网9月24日电 二十国集团(G20)领导人第三次金融峰会今日将在美国匹兹堡召开。 ' ;
echo $str ;
echo ' <br> ' ;
echo cutStr( $str , 0 , 25 );
echo ' <br> ' ;
?>
/*
* UTF-8字符串截取
* $str 要截取的字串
* $start 截取起始位置
* $length 截取长度
*/
function cutStr( $str , $start , $length ) {
$restr = '' ;
$j = 0 ;
$end = $length + $start - 1 ;
$plen = strlen ( $str );
for ( $i = 0 ; $i < $plen ; $i ++ ) {
$restr .= ord ( $str [ $i ]) > 127 ? $str [ $i ] . $str [ ++ $i ] . $str [ ++ $i ] : $str [ $i ];
$j ++ ;
if ( $j < $start ){ $restr = '' ;}
if ( $j >= $end ){ break ;}
}
$restr .= '' ;
return $restr ;
}
$str = ' 中新网9月24日电 二十国集团(G20)领导人第三次金融峰会今日将在美国匹兹堡召开。 ' ;
echo $str ;
echo ' <br> ' ;
echo cutStr( $str , 0 , 25 );
echo ' <br> ' ;
?>