如何在Windows CMD的PHP中用转义双引号输出^&|<>等特殊字符
问题根源
报错是Windows CMD命令行转义规则与PHP字符串转义规则两层冲突导致:
- 第一层是CMD先解析整条命令,
^&|<>都是CMD的内置特殊符号,默认会被CMD识别为命令控制符,不会作为普通字符传递给PHP - 第二层是PHP解析传入的代码字符串,双引号包裹的PHP字符串内部的双引号需要转义
双引号包裹代码场景的正确写法
所有需要输出的CMD特殊字符,都需要在CMD层面加^前缀转义后再传入PHP:
- 输出
^:php -r "echo \"^^\";" - 输出
&:php -r "echo \"^&\";" - 输出
|:php -r "echo \"^|\";" - 输出
<:php -r "echo \"^<\";" - 输出
>:php -r "echo \"^>\";"
如果需要同时输出多个特殊字符,直接拼接转义后的字符即可,例如输出^&<>的命令为:php -r "echo \"^^^&^<^>\";"
原理解释
- CMD双引号字符串内,
^作为转义符,仅对紧随其后的特殊字符生效:两个连续的^会被CMD解析为单个普通^传递给PHP;其他特殊字符&|<>前加单个^即可被CMD识别为普通字符传入PHP - 代码内用于转义PHP双引号的
\不会被CMD解析,直接保留传入PHP,符合PHP双引号字符串转义规则
内容的提问来源于stack exchange,提问作者Eva Silviana
相关产品推荐
相关产品推荐

