Windows路径反斜杠转义时如何避免\202等序列被自动解析为特殊字符
路径反斜杠转义序列解析问题解决方法
问题根因
你遇到的乱码问题并不是str_replace方法导致的,而是你用双引号定义原始路径字符串时,PHP就已经把路径中的\202识别为八进制转义序列,解析为了对应的不可打印ASCII字符,后续str_replace处理的已经是被解析出错的字符串,自然无法得到正确结果。
解决方案
- 方案1:优先使用单引号定义硬编码的路径字符串
PHP 单引号字符串仅会对\'、\\两个序列做转义处理,其余反斜杠都会被原样保留,不会解析八进制、十六进制等转义序列:
该代码输出结果为:// 单引号定义原始路径,避免提前解析转义序列 $originalPath = '\\hdone\DDD\CP0359T6\PP26\20210819T144131Z'; // 转义反斜杠用于后续请求 $escapedPath = str_replace('\\', '\\\\', $originalPath); echo $escapedPath;\\hdone\\DDD\\CP0359T6\\PP26\\20210819T144131Z,符合预期。 - 方案2:如果必须使用双引号定义路径,需要提前转义所有反斜杠
每个路径中的\都要提前写为\\避免被解析为转义序列,该方案容错率低,不推荐优先使用:$originalPath = "\\\\hdone\\DDD\\CP0359T6\\PP26\\20210819T144131Z"; $escapedPath = str_replace("\\","\\\\", $originalPath); - 方案3:非硬编码的外部路径无需额外处理
如果路径是从用户输入、文件读取、数据库查询等外部渠道获取的,不会经过PHP语法层的转义解析,直接调用str_replace转义反斜杠即可正常使用。
内容的提问来源于stack exchange,提问作者Jean-Philippe SANTOS DE JESUS
相关产品推荐
相关产品推荐

