String(String)字符串是字符的集合。如“abc”。在PHP中,一个字符代表一个字节,一个字节(Byte)有8位(bit)。PHP只支持256个字符集,所以PHP本身不支持Unicode字符集。这意味着PHP仅支持256个字符集,因此不提供本机Unicode支持。那么PHP是如何支持Unicode字符集的呢?答案在于PHP的底层字符串实现。PHP字符串是一个字节数组。加上指定缓冲区长度的整数。没有关于如何将字节转换为字符的信息。那么如何对字符串进行编码和解码,就完全由用户自己决定编码方式了。该字符串将根据与脚本文件相同的编码方法进行编码。因此,如果脚本以ISO-8859-1编码,则其中的字符串也将以ISO-8859-1编码,依此类推。但是,这不适用于ZendMultibyte激活时;这时脚本可以用任何方式编码(显式指定或自动检测),然后转换为某种内部编码,然后字符串将以这种方式编码。字节数组。答案是字符串将以它在脚本文件中编码的任何方式进行编码。因此,如果脚本是用ISO-8859-1编写的,则字符串将以ISO-8859-1编码,依此类推。但是,如果启用了ZendMultibyte,则这不适用;在这种情况下,脚本可以用任意编码(明确声明或检测到)编写,然后转换为特定的内部编码,这就是将用于字符串文字的编码。我举个例子说明一下,比较容易理解//unicode字符集下的utf-8编码方式$s='strict';var_dump(strlen($s));//3$len=strlen($s);//3/***int(228)对应二进制11100100*int(184)对应二进制10111000*int(165)对应二进制10100101*/for($i=0;$i<$len;$i++){var_dump(ord($s[$i]));}怎么会有三个“strict”字符而不是一个,因为strlen返回的是字节数,而不是字符数。PHP的底层字符串实现。是一个字节数组。因此可以得出结论,PHP底层实现“严格”的utf-8编码方式是一个3字节的数组,而这些字节不超过256的值,这就是PHP的编码方式。解码就是通过文件编码的方式,取对应的字节数,找到对应的文字字符。这些值表示的是utf-8的编码方式。严格的Unicode是4E25(100111000100101)。根据上表可以发现4E25在第三行(00000800-0000FFFF)范围内,所以严格的UTF-8编码需要三个字节,即格式为1110xxxx10xxxxxx10xxxxxx。然后从最后一个二进制位开始,按照格式从后往前填入x,多余的位补0。这样严格的UTF-8编码为111001001011100010100101,即E4B8A5时转换成十六进制。对非二进制安全字符串可以包含哪些值没有限制;特别是,值为0的字节(“NUL字节”)可以在字符串中的任何位置(尽管本手册中有几个函数称为Not"binarysafe",可能会忽略NUL字节之后的所有数据)。在C语言中,字符串都是以\0结束的,而PHP底层是用C语言写的,所以有些函数遇到\0会忽略后面的字节,影响程序逻辑和结果。$string1="Hello";$string2="Hello\0World";//非二进制安全,\0在ascii表中为NUL'\0'var_dump(strcoll($string1,$string2));//0//二进制安全var_dump(strcmp($string1,$string2));//-6syntaxsinglequotesdoublequotesheredocsyntaxstructurenowdocsyntaxstructure(sincePHP5.3.0)用单引号定义字符串最简单的方法是用单引号括起来(字符'),单引号不能解析变量和转义符,表示单引号本身,在单引号前加一个单引号Backslash(),表示反斜杠(),在反斜杠前加一个反斜杠()//thisisstringecho'thisisstring';//I'myourfatherecho'I\'myourfather';//C:\*.*?echo'C:\\*.*?';双引号把字符用双引号(")括起来,PHP双引号会将特殊字符解释为后面的转义序列。双引号还有一个特点就是会解析变量。变量解析有两种解析语法,一种是简单的,另一种是另一个是复杂的Simpleparsinggrammar:简单的解析方法当PHP解析器遇到美元符号($)时,它会像许多其他解析器一样,将尽可能多的标记组合起来形成一个有效的变量名。大括号可用于限制分析范围。$juice='apple';$juices='apple\s';//他喝了一些苹果汁echo"他喝了一些$juice果汁。".PHP_EOL;//Hedrinksomeapple\sjuiceecho"Hedranksome$juicesjuice".PHP_EOL;//Hedrinkedsomeapplesjuiceecho"Hedranksome{$juice}sjuice".PHP_EOL;同样,也可以解析数组索引或对象属性。数组索引使用方括号(])指示索引结束的边距,对象属性遵循与上述变量相同的规则。ComplexParsingSyntax之所以叫复杂,不是因为语法复杂,而是因为它允许复杂的表达式。任何具有字符串表达式的标量变量、数组元素或对象属性都可以使用此语法。只需像在字符串外部一样编写表达式,并将其括在花括号{和}中。由于{无法转义,因此只会识别紧跟在{之后的$。您可以使用{$来表示{$.echo"这也行:{$obj->values[3]->name}";echo"这也行:{$obj->values[3]->name}";echo"这是由getName()的返回值命名的var的值:{${getName()}}";Heredoc表示字符串的第三种方式是使用heredoc语法结构:<<<。在运算符之后提供标识符,后跟换行符。接下来是字符串本身,最后使用上面定义的标识符作为结束标记。最后引用的标识符必须在行的第一列,标识符的命名必须像其他标签一样遵循PHP的规则:它只能包含字母、数字和下划线,并且必须以字母和下划线开头。heredoc结构就像一个没有双引号的双引号字符串,也就是说heredoc结构中的单引号不需要转义,但是上面列出的转义序列也可以使用$str=<<
