php preg_replace 修饰符u的作用

WBOY
풀어 주다: 2016-06-23 14:35:47
원래의
1314명이 탐색했습니다.

手册中的解释是

”此修正符打开一个与perl不兼容的附加功能. 模式字符串被认为是utf-8的“

啥意思呢 个人也不不知道理解的对不对 说说自己的看法

utf8 是一种可变长度的编码 一个中文的utf8可能是2个 可能是3个也可能是4个字节长度

正式因为这种编码的特殊行 如果你没有告诉php的再处理正则时用的是utf8 php可能自己就乱了 就容易吧中文截断出现乱码

如果加上这个参数呢 他会去分析首字节判断出真正的长度 这样就不会乱了

test('/(\D+)(\d+)\w/u');function test($pre){    $str = "六角恐龙:12个";    $a = preg_replace($pre, '$1$2条', $str);    echo $a.'<br/>';}
로그인 후 복사

 

引用别人的utf8解释:

 

UTF,是Unicode Text Format的缩写,意为Unicode文本格式。根据Unicode的编码可以生成UTF编码,转换规则如下:
(1)首先将Unicode的编码转换成二进制形式,这样一个字符对应一个16位的二进制数。

(2)如果Unicode的16位二进制编码的头9位都是0,则用一个字节表示该字符,这个字节的首位是“0”,剩下的7位与原编码中的后7位相同。例如 “\u0034”(0000 0000 0011 0100),用“34” (0011 0100)表示(与原Unicode编码是相同的,只是去掉了原编码的首字节);


(3)如果Unicode的16位二进制编码的头5位都是0, 则用两个字节表示该字符,首字节以“110”开头,该字节后面的5位与源编码中头5个零后面的5位相同;第二个字节以“10”开头,后面的六位则与源编码 中剩下的6位相同。例如“\u025d”(0000 0010 0101 1101),转化后为“c99d”(1100 1001 1001 1101);


(4)如果Unicode的16位二进制编码不符合上述两个规则,则用三个字节表示该字符。第一个字节以“1110”开头,后四位 与源编码的头4位相同;第二个字节以“10”开头,后六位与原编码接下来的6位相同;第三个字节也以“10”开头,后六位与原编码剩下的6位相同,这样原 来16位的编码就转换成三个字节24位的编码了;例如“\u9da7”(1001 1101 1010 0111),转化为“e9b6a7”(1110 1001 1011 0110 1010 0111)。

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿