PHP转义十六进制字符

时间:2015-08-04 09:38:03

标签: php hex notation

我编写了一个脚本,它使用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

*编辑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

1 个答案:

答案 0 :(得分:1)

php函数rawurldecode应该可以搞定!但如果您发布了一些真正的PHP代码,那么更容易确定您的确切问题!

相关问题