我正在使用$_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:
localhost/test.php
https://www.example.com/test.php?info1234=3177%3B315961%3B317451%3B315511&info3598=121618%3B136803%3B13830%3B20532
您会看到2种不同的输出结果