PHP str_replace没有正确替换Windows路径字符串

时间:2018-04-27 09:00:40

标签: php

$search = 'C:\xampp1.7.7\htdocs\myproject\uploads/files/temp-ds-original';
$subject = 'C:\xampp1.7.7\htdocs\myproject\uploads\files\temp-ds-original\32bd76470cff973ec873d43a4e84dd2f.jpg';    
echo str_replace($search, '', $subject);

它只打印$subject而不进行任何替换。我认为这可能是由于某些php版本问题,因为它是在PHP 5.3上,但后来我转移到php 7.2但仍然是相同的结果。不知道这里出了什么问题?

是否与斜杠有关?

我上面有硬编码的字符串值,但在实际的脚本中,我使用$f->getRealPath()来获取主题和搜索。 $fRecursiveIteratorIterator

的对象

修改

当我发布这个问题时,我可以发现问题,因为代码突出显示更容易看到斜杠不匹配 - 这意味着str_replace认为它是不匹配的。我想要实现的是得到相对路径,在上面的示例中是\32bd76470cff973ec873d43a4e84dd2f.jpg ...代码在第48行https://gist.github.com/bubba-h57/5117694

以上输出是在Windows机器上,但稍后我将在Linux服务器上使用此脚本。所以我需要考虑如何使路径保持一致,以便str_replace可以正确地进行替换。 $ search是我手动提供的东西,其中使用$ f-> getRealPath()自动检索$ subject。

更新和回答我的问题 我不相信这个问题与链接问题重复。人们很快就可以炫耀自己的技能而不必对细节给予足够的重视。 :)

原来这是一个简单的解决方案。我需要做的就是使用realpath(),即$search = realpath($search);,它给出了正确的结果。

3 个答案:

答案 0 :(得分:1)

这样可以帮助任何人 -

$search = 'C:\xampp1.7.7\htdocs\myproject\uploads/files/temp-ds-original';
$subject = 'C:\xampp1.7.7\htdocs\myproject\uploads\files\temp-ds-original\32bd76470cff973ec873d43a4e84dd2f.jpg';    
echo str_replace($search, '', $subject);

输出是:

C:\xampp1.7.7\htdocs\myproject\uploads\files\temp-ds-original\32bd76470cff973ec873d43a4e84dd2f.jpg

但是我期待的是:

\32bd76470cff973ec873d43a4e84dd2f.jpg

我没有注意到斜杠不匹配,因此str_replace没有出错。重要的是,我并没有尝试仅从basename()或其他方法获取文件名,因此我需要获得正确的斜杠。

我需要的只是使用PHP的realpath()

$search = realpath($search); 

就是这样。但是,您需要小心它只对我有用,因为我正在解析实际路径,即$ search中的文件夹存在于磁盘上。因此,如果您尝试解析虚拟或非真实目录的路径字符串,realpath()将返回空或假。

答案 1 :(得分:0)

您必须这样做

enter image description here

如果仅使用一个不起作用,则必须使用双反斜杠!

结果:

enter image description here

答案 2 :(得分:-1)

您可以始终使用相同的搜索

(例如:$search = 'C:\xampp1.7.7\htdocs\myproject\uploads\files\temp-ds-original';

然后使用str_replace('/','\',$subject);

更改主题的斜杠

或者您可以检测操作系统,然后使用匹配的$search

您可以通过检查PHP常量PHP_OS(链接中的文档)

来完成此操作

我希望能解决它。