首页 > 解决方案 > 如何获得完全解码的字符串

问题描述

我正在使用$_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. localhost/test.php?https://www.example.com/test.php?info1234=3177%3B315961%3B317451%3B315511&info3598=121618%3B136803%3B13830%3B20532
  2. 这解码一次

方法二:

  1. localhost/test.php
  2. 通过表格提交此链接 https://www.example.com/test.php?info1234=3177%3B315961%3B317451%3B315511&info3598=121618%3B136803%3B13830%3B20532
  3. 这解码两次

你会看到你得到 2 个不同的输出

标签: phpformsgetdecodeurldecode

解决方案


推荐阅读