Как получить полностью декодированную строку - PullRequest
0 голосов
/ 30 января 2019

Я использую $_SERVER['QUERY_STRING'] вместо $_GET, чтобы получить все мои параметры.Однако $_SERVER['QUERY_STRING'] кодирует строку самостоятельно.Таким образом, если пользователь отправляет закодированную строку, он снова кодируется с помощью $_SERVER['QUERY_STRING'].Это означает, что я должен выполнить urldecode дважды.

Кодированная строка: https://www.example.com/test.php?info1234=3177%3B315961%3B317451%3B315511&info3598=121618%3B136803%3B13830%3B20532

Если вы используете ссылку выше для отправки через сам URL.То есть, вы помещаете параметр в себя, вы получаете строку (что я и хочу):

https://www.example.com/test.php?info1234=3177;315961;317451;315511&info3598=121618;136803;13830;20532

Однако, если вы отправляете через форму, вы получаете дважды закодированную строку.Поэтому, когда вы декодируете, он декодирует только один раз, и вам нужно снова запустить urldecode, чтобы полностью его декодировать:

https://www.example.com/test.php?info1234=3177%3B315961%3B317451%3B315511&info3598=121618%3B136803%3B13830%3B20532

Как я могу убедиться, что получаю декодированную строку (я нехочу запустить urldecode дважды на строке, поскольку это усложняет мое время O(2n). Я хочу попробовать сохранить его на O(1) или, по крайней мере, O(n). Я знаю, используя urldecode означает nкаждый раз.

<?php
$a = urldecode($_SERVER['QUERY_STRING']);

$b = urldecode($a);
if(strpos($a, "%") != false) {
    echo "We had to decode twice<br>";
    echo $a . "<br><br>Then to:<br>" . $b;
} else {
    echo "Only decoded once!!<br>";
    echo $a;
}
?>

<form action="test.php" method="get">
  myurl: <input type="text" name="myurl"><br>
  <input type="submit" value="Submit">
</form>

Метод 1:

  1. localhost/test.php?https://www.example.com/test.php?info1234=3177%3B315961%3B317451%3B315511&info3598=121618%3B136803%3B13830%3B20532
  2. Это декодирует один раз

Метод 2:

  1. Перейти к localhost/test.php
  2. Отправить эту ссылку через форму https://www.example.com/test.php?info1234=3177%3B315961%3B317451%3B315511&info3598=121618%3B136803%3B13830%3B20532
  3. Это декодируетдважды

Вы увидите 2 разных выхода

...