在php中,函数strlen()返回字符串的长度,实际上是计算得到字符串所占的字节长度,在不同的编码下,字符串所占的字节长度是不同的。
列举几个常用的字符编码占用字节情况:
ASCII码:一个ASCII码就是一个字节
UTF8编码:一个英文字符占用一个字节,一个中文(含繁体)占用三个字节
Unicode编码:一个英文字符占用两个字节,一个中文(含繁体)占用两个字节
GBK和GBK2312编码:一个中文(含繁体)占用两个字节
符号:英文标点占一个字节,中文标点占两个字节
在php中计算字符串长度时会出现一些问题,strlen()函数并不能准确的返回字符串的实际长度,当字符串中含有中文,全角符号等情形时,
如:(当前文本为utf8编码)
<?php
echo strlen("字符串"); // 结果:9
输出6,函数实际返回的不是字符串的字符长度,而是字符串所占的字节长度。在一些场景下,这并不符合我们的需求,为了解决这个问题,
我们可以使用mb_strlen()函数来协调字符串字符长度和字节长度,真实的计算出其字符长度。由于mb_strlen()不是php内置函数,需要我们
在php扩展功能模块中引入php_mbstring.dll,使用格式:int mb_strlen(string string_input, string encode);
示例:
echo mb_strlen('字符串','utf8');//3
补充:关于数据存储单位的简单说明
计算机数据存储基本单位是字节(Byte,简称B),数据传输的基本单位是“位”(bit,简称b),一个字节等于8位二进制,一个位表示一个0或1。
一个字节的取值范围为0~255 (2^8)。
1B=8b
1KB=1024B=2^10B
1MB=1024KB=2^20B
1GB=1024MB=2^30B
1TB=1024GB=2^40B
1PB=1024TB=2^50B