PHP разбора строки без декодирования - PullRequest
0 голосов
/ 01 июля 2018

My $_SERVER['QUERY_STRING'] возвращает это:

route=common/home/test/aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g%2Fdj1iZWsxeTJ1aVFHQQ%3D%3D/456&param2=test

Как мы видим, есть строка в кодировке base64, переданная с запросом get. Я хочу разобрать параметр маршрута без расшифровки его значения.

Мне нужно это:

common/home/test/aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g%2Fdj1iZWsxeTJ1aVFHQQ%3D%3D/456

Не этот:

common/home/test/aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1iZWsxeTJ1aVFHQQ==/456

Я попытался проанализировать параметр маршрута с помощью функции parse_str. Но он расшифровал значение маршрута.

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Вы могли бы по существу копировать parse_str, но без применения urldecode:

$x = $_SERVER['QUERY_STRING'];
$y = explode('&', $x);

$qs = [];

foreach($y AS $z) {
    list($key, $val) = explode('=', $z);
    $qs[$key] = $val;
}

Что должно дать вам

array(2) {
  ["route"]=> string "common/home/test/aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g%2Fdj1iZWsxeTJ1aVFHQQ%3D%3D/456"
  ["param2"]=> string "test"
}
0 голосов
/ 01 июля 2018
$route_var = $_REQUEST["route"];
$pieces = explode("/", $route_var);
$sliced = array_slice($pieces, 3)
$based = implode("/", $sliced);
$pathslice = array_slice($pieces, 0,3);
$path = implode("/", $pathslice);
$b64part = urlencode($based);
$output = $path."/".$b64part;

Это должно дать вам ваш правильный закодированный base64, если вы выводите эхо.

...