重庆专业网站排名团队,wordpress标签页模板,华为外包做的网站,网站新闻百度收录PHP中的字符串可以用四中方式来定义#xff1a; 单引号#xff0c;双引号#xff0c;Nowdoc结构 #xff0c; heredoc 结构 也就说用这四中方式命名的字符串不管有没有值#xff0c;都是字符串类型的变量。 但是#xff0c;字符串遍历是已经定义好了怎么操作这些字符串 单引号双引号Nowdoc结构 heredoc 结构 也就说用这四中方式命名的字符串不管有没有值都是字符串类型的变量。 但是字符串遍历是已经定义好了怎么操作这些字符串就需要考虑当截取中文的时候大部分我们都会用substr但是都会有出现乱码的经历这就是因为php的字符串编码方式的原因 php手册中关于字符串定义部分有这样一部分一个字符串 string 就是由一系列的字符组成其中每个字符等同于一个字节。这意味着 PHP 只能支持 256 的字符集因此不支持 Unicode 。这句话的意思也就是不支持多字节的编码的方式所以当用substr截取中文的时候会出现乱码因为中文如果是gbk编码的话会占用两个字节UTF8编码的话会占用三个字节也就是说一个中文字的如果用strlen统计的话长度会是2或是3这也就是substr出现乱码的原因。 字符串类型 PHP 中的 string 的实现方式是一个由字节组成的数组再加上一个整数指明缓冲区长度。并无如何将字节转换成字符的信息由程序员来决定。字符串由什么值来组成并无限制也就是字符串可以使二进制方式十六进制方式等等其他方式。字符串类型的此特性解释了为什么 PHP 中没有单独的“byte”类型 - 已经用字符串来代替了。返回非文本值的函数 - 例如从网络套接字读取的任意数据 - 仍会返回字符串。 由于 PHP 并不特别指明字符串的编码那字符串到底是怎样编码的呢例如字符串 á 到底是等于 \xE1ISO-8859-1\xC3\xA1UTF-8C form\x61\xCC\x81UTF-8D form还是任何其它可能的表达呢答案是字符串会被按照该脚本文件相同的编码方式来编码。因此如果一个脚本的编码是 ISO-8859-1则其中的字符串也会被编码为 ISO-8859-1以此类推。不过这并不适用于激活了 Zend Multibyte 时此时脚本可以是以任何方式编码的明确指定或被自动检测然后被转换为某种内部编码然后字符串将被用此方式编码。注意脚本的编码有一些约束如果激活了 Zend Multibyte 则是其内部编码- 这意味着此编码应该是 ASCII 的兼容超集例如 UTF-8 或 ISO-8859-1。不过要注意依赖状态的编码其中相同的字节值可以用于首字母和非首字母而转换状态这可能会造成问题。也就是说不要依据文本的编码方式来处理字符串应该使用mbstring这种方式来处理。 当然了要做到有用操作文本的函数必须假定字符串是如何编码的。不幸的是PHP 关于此的函数有很多变种 某些函数假定字符串是以单字节编码的但并不需要将字节解释为特定的字符。例如 substr()strpos()strlen() 和strcmp()。理解这些函数的另一种方法是它们作用于内存缓冲区即按照字节和字节下标操作。某些函数被传递入了字符串的编码方式也可能会假定默认无此信息。例如 htmlentities() 和 mbstring 扩展中的大部分函数。其它函数使用了当前区域见 setlocale()但是逐字节操作。例如 strcasecmp()strtoupper() 和 ucfirst()。这意味着这些函数只能用于单字节编码而且编码要与区域匹配。例如 strtoupper(á) 在区域设定正确并且 á 是单字节编码时会返回 Á。如果是用 UTF-8 编码则不会返回正确结果其结果根据当前区域有可能返回损坏的值。最后一些函数会假定字符串是使用某特定编码的通常是 UTF-8。intl 扩展和 PCRE上例中仅在使用了 u 修饰符时扩展中的大部分函数都是这样。尽管这是由于其特殊用途utf8_decode() 会假定 UTF-8 编码而 utf8_encode() 会假定 ISO-8859-1 编码。最后要书写能够正确使用 Unicode 的程序依赖于很小心地避免那些可能会损坏数据的函数。要使用来自于 intl 和mbstring 扩展的函数。不过使用能处理 Unicode 编码的函数只是个开始。不管用何种语言提供的函数最基本的还是了解 Unicode 规格。例如一个程序如果假定只有大写和小写那可是大错特错。转载于:https://www.cnblogs.com/phplhs/p/3668353.html