先介绍一下字符的编码
计算机只能识别二进制,对于0-9、A-Z、a-z、特殊的符号,计算机都不能认识。
ASCII编码
:是美国人发明的,用于处理显示英语国家的语言而设计的字符集。用7位或8位
二进制来表示一个字符。- 共可以表示2^8=256个字符。如:10101010 表示 A
ANSI编码
:其它国家为了显示本国语言,而对ASCII码进行了扩充。- 常用的ANSI编码有:
GB2312、GBK、BIG5、JIS
- ANSI 中的字符都是用2个字节(16位二进制)来表示一个字符。如:用1110000000101011表示一个“北”
- GB2312 简体中文编码:对6763常用汉字进行编码。
- GBK简体扩展码 对GB2312进行了扩展,可以对2.4万汉字进行了编码,提供了1800多个造字位。
- BIG5 繁体中文编码。
- 常用的ANSI编码有:
Unicode编码(统一)
:将世界上所有字符进行了统一编码,大约100万个左右。效率太低,不便于推广。- 用4个字节(32位二进制)来表示一个字符。如:00000000000000000000000010100010 代表 A
UTF-8编码(统一格式转换)
:根据不同字符而选择不同的编码长度。- UTF-8是一种可变长度编码,又称“多国语言编码”。
- UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。
- 一个汉字在utf-8下的长度为3
几个获取字符串长度的php函数
1.strlen( string $str
) //获取字符串长度
注意:这里用的字符编码为php内部编码。及根据不同的字符来判断;
|
|
现在看明白了吧,用strlen这个函数时,php会根据字符来将其转化为相应的字符编码。当识别出字符为英文时,则选择ASCII编码,当为中文时为UTF-8,中英文混合时为UTF-8.
2.mb_strlen( string $str [, string $encoding = mb_internal_encoding() ])
//获取字符串的长度
注意:这里的第二个参数可以选择将字符串以哪种编码形式来计算。可省略,省略后同strlen
|
|
可见,在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算。其他的自己试试吧,不做赘述了。
3.substr ( string $string , int $start [, int $length ] )
//返回字符串 string 由 start 和 length 参数指定的子字符串。
|
|
4.string mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] )
//根据字符数执行一个多字节安全的 substr() 操作。 位置是从 str 的开始位置进行计数。 第一个字符的位置是 0。第二个字符的位置是 1,以此类推。
|
|