str_replace的奇怪行为

时间:2017-07-20 19:00:23

标签: php

我正在尝试做一个简单的事情,将斜杠更改为文件路径中的反斜杠。 Windows 7操作系统

<?php
$fileName = "C:\migration\files\gallery\2c1c7e72-781e-4347-ab39-6e77409b93d5.json";
echo $fileName."<br>";
echo str_replace ("\\","/", $fileName);
$fileContent = file_get_contents($fileName);
echo $fileContent; 
exit();

我通过Apache和命令行运行此代码,我看到了奇怪的结果

C:\migrationiles\galleryc1c7e72-781e-4347-ab39-6e77409b93d5.json

第二个斜线消失,字母f&#34; \ f&#34;并且第四个斜线消失,数字2和#34; / 2&#34; 你们能解释一下我怎么可能吗?

1 个答案:

答案 0 :(得分:2)

这只是因为转义排序字符而发生,你不能直接在php中打印\来打印\你应该把它写成\\。使用这样来替换字符串中的双反斜杠

$newstr = str_replace('\\\\', '/', $fileName);

或者只是使用正则表达式作为

$newstr = preg_replace('/\\\\/', '/', $fileName);