提交按钮/表单时转义HTML编码字符

mm5n2pyu  于 2023-01-24  发布在  其他
关注(0)|答案(1)|浏览(143)

我需要在用户点击一个使用GET METHOD的按钮时发送多个值。因为要发送多个值,所以我使用了如下参数:

$argument='var2=value2&var3=value3';
echo "<button value='value1&$argument&' type='submit' name='var1'>Send</button>";

本质上,HTML中的button标记有一个限制,即它只能发送一个名称-值对。在本例中,它将发送name='var1'和对应的值value1。因此,我通过PHP $argument变量追加其他名称-值对。在本例中,var2=value2&var3=value3被追加并发送。
到这里都很好。
问题是,当它到达提交的页面时,它得到的是以下编码:https://example.com/dir1/page.php?var1=value1%26var2%3Dvalue2%26var3%3Dvalue3%26
本质上,&得到了%26,而=变成了%3D。我知道这是由于HTML的内置encodeURIComponent,但是由于这种编码,表单提交失败了。
我正在寻找一种方式/方法来接收提交的页面中的以下内容(即没有编码),以便可以顺利处理:
https://example.com/dir1/page.php?var1=value1&var2=value2&var3=value3&
PS:已经探索了现有的线程,如Escaping ampersand in URL & Why does %26 get decoded to & when passed as a parameter to a JavaScript function from a link? &更多,但无法找到答案。
还尝试了URL/HTML escaping/encoding中提到的以下操作,但不起作用:

echo "<button value='value1&".htmlspecialchars($argument)."' type='submit' name='var1'>Send</button>";

如果任何现有的答案存在,请指出我在评论之前,标记这个问题了。谢谢

wrrgggsh

wrrgggsh1#

您可以简单地将这些值分别放在按钮所在表单的隐藏字段中。
例如:

<form>
    <button type='submit' name='send'>Send</button>
    <input type="hidden" name="var1" value="<?php echo htmlspecialchars($val1)?>">
    <input type="hidden" name="var2" value="<?php echo htmlspecialchars($val2)?>">
</form>

然后,在提交表单时,浏览器将使用这些URL自动为您创建一个正确构造和编码的URL。

相关问题