【问题标题】:PHP escaping hexadecimal charactersPHP转义十六进制字符
【发布时间】:2015-08-04 09:38:03
【问题描述】:

我编写了一个脚本,它使用 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 起作用。如果我以相同的值提供 start 和 end ,它仍然会显示 end 错误(与 start 它可能工作或不工作)。 @pcdoc

【问题讨论】:

    标签: php hex notation


    【解决方案1】:

    php 函数 rawurldecode 应该可以解决问题!但是,如果您发布了一些真实的 php 代码,则更容易确定您的确切问题!

    【讨论】:

      猜你喜欢
      • 2018-09-13
      • 1970-01-01
      • 2020-11-07
      • 2015-05-30
      • 2017-04-05
      • 1970-01-01
      • 2018-01-31
      • 1970-01-01
      相关资源
      最近更新 更多