gpt4 book ai didi

php - 不要在表单提交时转义特殊字符

转载 作者:搜寻专家 更新时间:2023-10-31 21:43:43 25 4
gpt4 key购买 nike

我有一个通过 GET 提交的表单,其中一个隐藏字段提交了类别 ID 列表,以逗号 (1,2,3) 分隔。

当 get 查询到达它要访问的页面时,逗号将转义为 %2C

我无法更改解析这些值的 PHP,它们必须保留为逗号。

总结:?category=1,2,3 有效,而 ?category=1%2C2%2C3 无效。

如何防止逗号被编码?

编辑以解决评论,简化,但为您提供要点:

<form method="get" action="something.php">
<input type="hidden" name="category" value="1,2,3">
<input type="submit">
</form>

最佳答案

“让它停止”的问题是编码是 HTTP 标准的一部分——你“不应该”让它停止,因为它是构建 HTTP 的基础的一部分。 RFC2396描述 URI 中允许和不允许使用的字符:

2.2. Reserved Characters

Many URI include components consisting of or delimited by, certainspecial characters. These characters are called "reserved", since
their usage within the URI component is limited to their reserved
purpose. If the data for a URI component would conflict with the
reserved purpose, then the conflicting data must be escaped before
forming the URI.

  reserved    = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
"$" | ","

因此,当使用 GET 提交表单时,用户代理将根据此规范对值进行编码。

你的解决方案在于要么

  1. 更改表单以使用 POST 方法,将对 $_GET 的引用更改为 php 中的 $_POST

  2. 在使用数据之前调用 urldecode ( docs ) ($_GET['my_value'] = urldecode($_GET['my_value']);)

  3. 使用元素数组将其作为数组提交给服务器

在 PHP 端,$_GET['myElement'] 将等于 array(1,2,3)

关于php - 不要在表单提交时转义特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7095474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com