//测试时文件的编码方式要是UTF8
<?php
$str='中文a字1符';
echo strlen($str).'<br>';//14
echo mb_strlen($str,'utf8').'<br>';//6
echo mb_strlen($str,'gbk').'<br>';//8
echo mb_strlen($str,'gb2312').'<br>';//10
?>
strlen :计算字节数,对待一个UTF8的中文字符是3个字节长度;
mb_strlen :计算字符数,在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算;
利用这两个函数则可以联合计算出一个中英文混排的串的占位是多少(一个中文字符的占位是2,英文字符是1)
echo (strlen($str) + mb_strlen($str,'UTF8')) / 2;
mb_strwidth :宽字符计算,则把中文算成 2 个字节;
中英混编字符串截取:mb_strimwidth($str, 0, 10, '...', 'utf8');
注:MySQL 5.0版本以上,varchar(50)无论存放的是数字、字母还是UTF8汉字,都可以存放50个字符。