真正优秀的程序员是那些专注于认识、理解、沟通和解决问题的人,你得明白,软件只是用来增加效率的工具而已

php字符串编码原理

1.字符串的语法

1.1 什么是字符串?

字符串是由一系列字符组成,每个字符等于一个字节。

1.2 定义字符串的几种方式?

  • 单引号
  • 双引号
  • heredoc语法结构(类似双引号)
$a = <<<EOT
adfasdf
EOT
  • nowdoc语法结构(类似单引号)
$a = <<<'EOT'
adfasdf
EOT

1.3 双引号可以解析那些字符?

  • 解析变量、\n(换行)、\r(回车)、\t (制表符)、\$美元符号、\”(双引号)等

制表符是啥意思?
产生一定距离的空白,使文本看上去像表格,是一种对齐方式,水平制表符使用 tab。

1.4 字符串和其他类型的转换过程?

  • 使用strval或变量前加string 来转换
$a  = 1;
$b  = (string)$a;
$c  = strval($a);

var_dump($b);
var_dump($c);

  • php内部自动转换规则

1.5 如何获取和修改字符串中的字符?

php字符串是类似数组的结构 和 一个表示长度的整数,所以可以像数组一样来取值和修改.

$a = 'abc';
echo $a[0];
$a[1] = 'd';

2.字符串原理

2.1 php在底层是如何存储的,什么决定字符串的长度?

  • 由字节组成的数组和一个整数表示缓冲区的长度,并无如何将字节转换为字符的信息,是由程序员决定的。

2.2 php字符串是怎样编码的呢?

  • 一般是根据文件的编码格式来决定字符串的编码
  • 但是针对多字节字符 则根据情况判断

2.3 二进制安全是什么意思?

  • 程序不会对数据结构做任何更改,写入的时候是什么样,读出的时候还是什么样
  • php有二进制安全函数 和非二进制安全函数
  • 非二进制安全的函数
strcoll  基于区域设置的字符串比较

相关链接 http://blog.csdn.net/zhuocr/article/details/70591310

3.字符编码方式

3.1 什么是位,什么是字节?什么是字符?

  • 位是计算机传输的最小单位,代表二进制中的一位,是二进制最小信息单位
  • 字节是计算机存储的最小单位
  • 字符 指计算机中的字母,数字、汉字、符号等

3.2 什么是ASCII编码?如何编码?

  • 是一套基于拉丁字母的电脑编码系统
  • 7个位代表一个字符,包含26个英文字母和特殊字符(共128个字符)–分别对应计算机二进制中的一个数字

3.3 什么是Unicode编码?

  • 为表达任意语言的任意字符而设计的 字符集

3.4 如何在xml中用unicode表示汉字

  • 使用&#nnn;来表示(nnn代表unicode的十六进制代码)

4.UTF8和GBK编码原理

4.1 什么是utf-8编码

  • utf-8编码是unicode 的编码实现方式

4.2 utf-8的编码规则–可变长字节的编码方式

  • 1.对于单字节的符号来说,以0开头,后边7为为符号的unicode 码
  • 2.对于n各字符(n>1),第一个字节的前n为1,n+1为0,后边字节的前两位为10,剩余的二进制位都是该符号的unicode码
  • 3.举例说明utf-8的编码方式(汉字严举例)
    汉字的unicode 编码为4E25(100 111000 100101),根据utf-8编码规则在0800-FFFF的范围内,所以取出1110xxxx 10xxxxxx 10xxxxxx,把的二进制的数字从右往左 套入规则中 ,多出的为补0, 的utf-8 二进制编码为 11100100 10111000 10100101,16进制为E4B8A5

4.3 utf-8带BOM 和 不带BOM的区别 –(BOM- byte order mark–字节排序标记)

主要区别是开头带不带EF BB BF,bom主要是插入到文件开头的一段特殊标记,用来区分unicode 不同的编码类型和字节顺序的。对于utf-8不是必须的。

4.4 带签名和不带签名的区别

带签名 即为带bom头,可以使解析器 根据签名来判断编码方式,不带签名,就需要 解析器 根据内容的编码来进行判断。

4.5 多字节函数mbstring 和iconv的区别? 使用的场景?

  • 区别
mb_convert_encoding 可以自动识别内部编码 转换为设置的编码,但需要php加载额外的扩展,所以效率低。
iconv 必须指定输入字符集,转换的字符集才能转换。效率高
  • 如何选择
只有在不知道原编码方式的情况下,或者使用iconv 转换出错的情况下,才使用`mb_convert_encoding`转换
微风小站 » php字符串编码原理
分享到: 更多 (0)