我编写了一个脚本,使用file_get_contents()在服务器上打开文件,路径通过POST传递。我只需要从POST接收路径并使用str_replace()将"%2F"更改为"/"。一切都很好,直到今天。现在,在一些支持的路径中,php会生成无法提供给file_get_contents()的未转义十六进制代码。
的例子:
2 parameters:
end = wypisZgierz/Łagiewniki Nowe Zachód/koncowe.htm
start = wypisZgierz/Łagiewniki Nowe Zachód/ogolne.htm
source:
start=wypisZgierz%2F%C5%81agiewniki+Nowe+Zach%C3%B3d%2Fogolne.htm&end=wypisZgierz%2F%C5%81agiewniki+Nowe
+Zach%C3%B3d%2Fkoncowe.htm
开始可以,但结束不行。
PHP error log:
PHP Warning: file_get_contents(wypisZgierz/'xc5'x81agiewniki Nowe Zach'xc3'xb3d/koncowe.htm): failed to open stream: No such file or directory
*EDIT 1 *
多亏了rawurldecode(),我可以跳过str_replace(),但这并不能帮助解决最初的问题。
真正的php代码:
<?php
session_start();
$start = "";
$end = "";
foreach ($_POST as $key => $value) {
if($key == "start") {
$start = $value;
$start = str_replace("%2F","/",$start);}
if($key == "end") {
$end = $value;
$end = str_replace("%2F","/",$end);
}
}
$tempstart = file_get_contents($start);
$html = $tempstart;
$tempend = file_get_contents($end);
$html = $html.$tempend;
echo $html;
?>
问题是,对于旧数据,它工作得很好,现在一旦$start和$end不起作用,一旦只有$start起作用。如果我用相同的值提供开始和结束,它仍然显示结束错误(开始它可能工作或不)。@pcdoc
PHP函数rawurldecode应该可以解决这个问题!但是,如果您发布了一些真实的php代码,则更容易确定您的确切问题!