URL编码问题:使用%3D代替(=)

13

我有一个URL,在搜索表单中显示的变量,但由于URL编码,它使用"%3d"代替"="符号,这显然行不通。

我知道你不能“关闭”URL编码,你不是必须设置允许特殊字符吗?

以下是代码:再次强调,我需要下面的等号符号在结果URL中显示,而不是%3d。

<?php _e('Job Type'); ?><br />
    <select name="custom_field_id[]=10" class="do_input2">
    <option value=""></option>
    <option value="custom_field_value_10=Full-time">Full-time</option>
    <option value="custom_field_value_10=Part-time">Part-time</option>
    </select>
1个回答

8

您的意思是希望提交的表单数据呈现如下形式:

custom_field_id[]=10=custom_field_value_10=Full-time

无论是在URL查询字符串中还是在application/x-www-webform-urlencoded请求的POST正文中?如果是,那么不行,你不能这样做。 这违反了URL和application/x-www-webform-urlencoded规范。 =是一个保留的分隔符字符,不能未编码地出现在namevalue字段中,它必须被编码为%3D

custom_field_id%5B%5D%3D10=custom_field_value_10%3DFull-time

在处理提交的数据之前,接收方需要负责 url-decode 这些数据。因此,它会看到 custom_field_id[]=10custom_field_value_10=Full-time 这些值,就像它们出现在原始 HTML 中一样。


事情是这样的...我正在使用一个主题,在管理面板中,您可以将某些搜索字段分配给类别,但为了使分配的搜索选项出现在搜索页面上,它必须设置为“所有类别”,这在网站的另一部分中没有意义,在那里人们填写初始表单...比如房地产帖子...我显然不需要在那里显示“工作类型”。因此,我只将其分配给工作类别-这样它只会在工作页面上显示。但是,正如所述,如果它没有分配到所有类别,选项框就不会显示在搜索页面上。 - user3606735
1
如果您按照这种方式做,那么生成的URL将正确显示-custom_field_id [] = 10 = custom_field_value_10 =全职但我不能这样设置...所以基本上,我只是在创建自己的搜索表单,我已经成功地为所有其他类别完成了,但由于某种原因,该类别被分配了(等于)符号。 因此问题出现了。 如果我可以将%3D更改为保持等号,则我就好了。 - user3606735
我也看到等号(=)是一个保留字符,只要用于特定的定义目的,就可以使用它。我不知道... 我会继续尝试。 - user3606735
3
这样的URL可能会以未编码格式显示给用户,但那只是浏览器为了显示目的而实现的行为。大多数不熟悉HTTP工作原理的人不理解URL编码。但这样的URL必须以我展示的编码格式传输到服务器,而浏览器会替你处理这个过程。 - Remy Lebeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接