PHP str_replace未正确替换windows路径字符串

PHP str_replace未正确替换windows路径字符串,php,Php,它只打印$subject而不进行任何替换。我认为这可能是由于php版本的问题,因为它是在PHP5.3上,但后来我转到PHP7.2,但仍然是相同的结果。不确定这里出了什么问题 这和斜杠有关吗 我上面有硬编码的字符串值,但在实际脚本中,我使用$f->getRealPath获取主题和搜索$f是递归迭代器的对象 编辑 一旦我发布了这个问题,我就可以发现这个问题,因为代码高亮显示使斜杠不匹配的情况变得更加清晰,这意味着stru-replace认为它不匹配。我试图实现的是获取相对路径,在上面的示例中是\32

它只打印$subject而不进行任何替换。我认为这可能是由于php版本的问题,因为它是在PHP5.3上,但后来我转到PHP7.2,但仍然是相同的结果。不确定这里出了什么问题

这和斜杠有关吗

我上面有硬编码的字符串值,但在实际脚本中,我使用$f->getRealPath获取主题和搜索$f是递归迭代器的对象

编辑

一旦我发布了这个问题,我就可以发现这个问题,因为代码高亮显示使斜杠不匹配的情况变得更加清晰,这意味着stru-replace认为它不匹配。我试图实现的是获取相对路径,在上面的示例中是\32bd76470cff973ec873d43a4e84dd2f.jpg。。。代码在第48行

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

更新和回答我的问题 我不认为这个问题与相关问题重复。在这里,人们很快就会炫耀自己的技能,而不去注意细节


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

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

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

然后使用str_replace“/”、“\”、$subject更改主题的斜杠

或者您可以检测操作系统,然后使用匹配的$search 您可以通过检查链接中的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);
产出为:

$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
我没有注意到斜杠不匹配,因此str_replace没有错。重要的是,我并不是只想获取文件名,我可以从basename或其他方法获取文件名,所以我需要正确地获取斜杠

我所需要做的就是使用PHP的

就这样。但是,您需要注意,它只对我有效,因为我正在解析实际路径,即磁盘上存在$search中的文件夹。因此,如果您试图解析一个虚目录或非实目录的路径字符串,realpath将返回空或false。

您必须这样做

如果只使用一个,则必须使用双反斜杠,否则将不起作用

结果:


实际上,当我发布问题时,我似乎已经发现了这个问题,因为代码突出显示使问题更清晰。我的源代码确实有不同类型的斜杠,它创建了一个不匹配的斜杠,因此没有替换。现在,我需要考虑如何在$search中使斜杠保持一致,因为$subject来自getrealpath。两个斜杠在$search字符串中是错误的$搜索='C:\xampp1.7.7\htdocs\myproject\uploads\files\temp ds original';这些字符串路径不相等。/与反斜杠不同\n我的问题是目前我正在Windows机器上进行此测试,但稍后我将向Linux服务器上载脚本-如何正确使用斜杠?我认为我们应该关注问题而不是问题。有一些特定的函数可以操作文件系统路径。你到底想做什么?查看我的更新。。。我可以只做$search=realpath$search,它负责斜杠。
\32bd76470cff973ec873d43a4e84dd2f.jpg
$search = realpath($search);