如何获得完全解码的字符串

时间:2019-01-30 20:53:56

标签: php forms get decode urldecode

我正在使用$_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种不同的输出结果

0 个答案:

没有答案