今天在测试文本过滤特殊字符的时候发现了PHP中一个奇怪的现象
下面直接用代码测试
<?php $text = "这是$一段文本"; echo $text.PHP_EOL; ?> //输出 这是
我们发现$后面的内容没有了
<?php $text = "这是$一段&文本"; echo $text.PHP_EOL; ?> //输出 这是&文本
我们加一个特殊符号&,发现$和&中间的文字没有了
下面我们再看一个例子
<?php $text = '这是$一段&文本'; echo $text.PHP_EOL; ?> //输出 这是$一段&文本
现在内容原样输出了
刚开始我们可能比较迷惑,其实稍微思索一下就知道了,是因为PHP中双引号""是可以解析变量的,而$又正好是变量定义的符号,所以在双引号中使用$就会被解析成变量,而PHP中对于变量名又没有不能使用文字的要求,只是找不到这个变量而已,又因为PHP是弱类型,变量找不到就找不到了,也不会报错,所以就发生了最开始会少一段文字的现象。
我们看到文本中加了&之后,&之后的内容会被展示,这是因为&不能被用于定义变量,所以PHP解析变量的时候就到&就结束了,所以&后面的文字就正常解析成文字输出了。
顺便我们在来复习下PHP的变量规则
PHP 中的变量用一个美元符号后面跟变量名来表示。变量名是区分大小写的。
变量名与 PHP 中其它的标签一样遵循相同的规则。一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。 按照正常的正则表达式,它将被表述为:'^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$
'。
PHP官方文档的描述:PHP: 基础 – Manual