php - 如何获得完全解码的字符串
问题描述
我正在使用$_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>
方法一:
localhost/test.php?https://www.example.com/test.php?info1234=3177%3B315961%3B317451%3B315511&info3598=121618%3B136803%3B13830%3B20532
- 这解码一次
方法二:
- 去
localhost/test.php
- 通过表格提交此链接
https://www.example.com/test.php?info1234=3177%3B315961%3B317451%3B315511&info3598=121618%3B136803%3B13830%3B20532
- 这解码两次
你会看到你得到 2 个不同的输出
解决方案
推荐阅读
- ios - 如果我在 ios 应用程序中使用 Firebase,是否需要填写出口合规报告?
- java - 尝试通过反射设置实例时抛出 java.lang.IllegalArgumentException
- django-models - 如何将用户模型的所有属性引用到不同的模型?
- css - 为什么我在打印模式下看到 SVG 图标附近有多余的线条?
- kotlin - 像表达式一样使用 foreach
- c# - 如何从 Jtoken 调用值
- java - 努力通过 REST 上传文件
- git - 如何从 Github 组织的所有存储库中获取提交
- asp.net-core - 如何为 FROM 命令生成 docker 映像路径
- python - 如何在 VS Code 中为选择的文件、glob 或类似文件关闭排序导入?