我有一个通过GET提交的表单,其中一个隐藏字段提交了一个类别ID列表,以逗号(1,2,3)分隔 .
当获取查询到达它正在进行的页面时,逗号将被转义为 %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>
4 回答
"making it stop"的问题在于编码是HTTP标准的一部分 - 你要使它停止,因为它是构建HTTP的基础的一部分 . RFC2396描述了URI中允许和不允许的字符:
由于这个事实,当使用GET提交表单时,用户代理将根据此规范对值进行编码 .
你的解决方案在于
1)更改表单以使用POST方法,将对
$_GET
的引用更改为php中的$_POST
2)在使用数据之前调用urldecode(docs)(
$_GET['my_value'] = urldecode($_GET['my_value']);
)3)使用元素数组将其作为数组提交给服务器
在PHP方面,
$_GET['myElement']
将等于array(1,2,3)
使用Javascript手动编码查询字符串?有点难看,但看起来它是唯一的选择 .
创建3个具有相同名称“category”和不同值1,2和3的隐藏字段 .
不要阻止编码,请考虑在收到字符串时对其进行解码 . 这是一个例子(使用java):
我刚注意到了php标签 . 虽然我不知道php,但我确信它将有一种方法来编码和解码HTML字符串值 .
Edit: 根据注释,尝试渲染CDATA块中隐藏的值 . 我不知道这是否会奏效,只是把它扔出去 . 这是一个例子:
<input type="hidden" name="blam" value="<![CDATA[1, 2, 3]]>"/>