扫码关注官方订阅号
$str1 = "\xe4\xb8\xad"; $str2 = '\xe4\xb8\xad'; $str3 = '中';
能否详细解释一下三者的区别,是否可以相互转化
走同样的路,发现不同的人生
第一次在segmentfault上回答问题。。
PHP字符串变量,双引号和单引号的意义是不同的
使用双引号时会转义 单引号时不转义使用双引号时,$xxxx文本会被相应变量的值替换,单引号没有这个效果
Eg.
$abc='123'; echo "$abc"; //这样会输出123 echo '$abc'; //这样会输出$abc echo "\n"; //这样会输出一个换行符 echo '\n'; //这样会输出\n两个字符(一个斜杠一个n)
回到问题,“中”这个汉字在UTF-8的16进制编码是0xe4,0xb8,0xad因此在双引号字符串中,会被转义为 “中” x开头表示这是一个以十六进制表达的字符,就和HTML中&xe4; 一样单引号字符串中,直接输出xe4xb8xad
如果你的环境编码是在UTF-8下面, str1和str3等价, 如果直接echo, 都会输出"中", 如果是二进制层面三个字节比较, 也是完全相等, PHP中的字符串就是直接本地编码二进制存储的
如果你的环境编码是非UTF-8(例如GBK), str1基本上是个乱码, str1和str3也不再等价
至于str2, 它无论什么时候都会输出 '\xe4\xb8\xad' (不含引号, 在单引号的字符串中, 只有单引号本身需要转义成\', 其它情况的\都视为普通字符处理
只解释第一个与第二个的区别,也就是单引号与双引号的区别
双引号:引号内部会被转义单引号:引号内部不会被转义
$a = 123; echo "output:$a";//output:123 echo 'output:$a';//output:$a //下面的示例仅限linux的php-cli echo "new line\nsecond line"; /* 会换行,输出: new line second line */ echo 'no new line\n aaa'; /* 不会换行,输出: no new line\n aaa */
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
第一次在segmentfault上回答问题。。
PHP字符串变量,双引号和单引号的意义是不同的
使用双引号时会转义 单引号时不转义
使用双引号时,$xxxx文本会被相应变量的值替换,单引号没有这个效果
Eg.
回到问题,
“中”这个汉字在UTF-8的16进制编码是0xe4,0xb8,0xad
因此在双引号字符串中,会被转义为 “中” x开头表示这是一个以十六进制表达的字符,就和HTML中&xe4; 一样
单引号字符串中,直接输出xe4xb8xad
如果你的环境编码是在UTF-8下面, str1和str3等价, 如果直接echo, 都会输出"中", 如果是二进制层面三个字节比较, 也是完全相等, PHP中的字符串就是直接本地编码二进制存储的
如果你的环境编码是非UTF-8(例如GBK), str1基本上是个乱码, str1和str3也不再等价
至于str2, 它无论什么时候都会输出 '\xe4\xb8\xad' (不含引号, 在单引号的字符串中, 只有单引号本身需要转义成\', 其它情况的\都视为普通字符处理
只解释第一个与第二个的区别,也就是单引号与双引号的区别
双引号:引号内部会被转义
单引号:引号内部不会被转义