我有一个HTML表单POST到PHP页面。
我可以使用PHP上的$ _POST变量读取数据。
但是,所有数据似乎都被转义了。
所以,例如
逗号(,)=%2C 冒号(:) =%3a 斜杠(/)=%2
因此像http://example.com这样的简单网址会被发布为http%3A%2F%2Fexample.com
有关正在发生的事情的任何想法?
答案 0 :(得分:3)
其实你想要urldecode。 %xx是URL编码,而不是html编码。真正的问题是你为什么要得到这些代码。 PHP通常会为您解析URL,因为它将请求解析为$ _GET和$ _REQUEST变量。发布的表单不应该是urlencoded。你能告诉我们一些生成表格的代码吗?也许你的表单是出于某种原因在出路上编码的。
请参阅此页面上的警告:http://us2.php.net/manual/en/function.urldecode.php
答案 1 :(得分:0)
这是一个解码所有POST变量的简单PHP循环
foreach($_POST as $key=>$value) {
$_POST[$key] = urldecode($value);
}
然后您可以按正常方式访问它们,但要正确解码。但是,我会使用不同的数组来存储它们,因为我不喜欢污染超级全局变量(我相信它们应该总是在PHP中有确切的数据)。
答案 2 :(得分:0)
这不应该发生,虽然您可以通过手动urldecode()来修复它,但您可能会隐藏其他地方的基本错误,可能会在以后咬你。
虽然当您使用默认内容类型'application / x-www-form-encoded'发布表单时,其中的值是URL编码的(%xx),当PHP使值可用时,PHP会撤消它们在$ _POST []数组中。
如果您之后仍然收到不需要的%xx序列,则必须有另一层手动URL编码,不应该存在。你需要找到它的位置。如果它是一个隐藏的字段,也许生成它的页面是使用urlencode()而不是htmlspecialchars()或其他东西意外编码的?在线提供一些示例代码可能有助于我们找到答案。