PHP экранирование шестнадцатеричных символов

1

Я написал сценарий, который использует file_get_contents() для открытия файлов на сервере, путь доставляется POST. Мне нужно было получить путь от POST и использовать str_replace(), чтобы изменить "% 2F" на "/". До сегодняшнего дня все отлично работало. Теперь на некоторых поддерживаемых путях php создает невыложенные шестнадцатеричные коды, которые не могут быть отправлены в файл_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() я coul пропускаю мой 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

Теги:
hex
notation

1 ответ

1

php-функция rawurldecode должна делать трюк! Но если вы разместили какой-нибудь настоящий php-код, было бы легче определить вашу точную проблему!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню