我正在使用数据库中的数据创建一个简单的下拉表单。在下拉菜单中,我向用户显示选项,并为每个选项的值编码URL,以便在提交空间呈现为%20时传递超链接。但是,在提交我的表单后,它似乎将我的空格从%20编码到%2520(%20再次编码)。这会为我网站上的相同内容创建不同的超链接,并且不是最佳的,因为这些链接与我用于在其他位置引用相同内容的%20链接不同。
我已经回显了测试它的选项值,它似乎是正确的,并在表单中存储为%20。对于我的生活,我无法弄清楚表单提交是什么导致值被第二次编码。任何帮助表示赞赏!
我使用PHP从我的数据库和BootStrap v3.0中提取值,如果这有任何区别的话。
表单代码:
<form name="topitems" id="topitems" action="best-items.php" method="get">
<strong>Best Items:</strong><br>
<select name="items" id="items" onChange="document.topitems.submit()">
<option value="option1">Select an Item</option>
<?php
require ('start_connection.php'); // Connect to the db.
// Make the query:
$query = "SELECT DISTINCT items FROM table WHERE displayed = 'Yes' ORDER BY items ASC";
$results = @mysqli_query ($dbc, $query); // Run the query.
if ($results) { // If it ran OK, display the records.
while($row = mysqli_fetch_array($results, MYSQLI_ASSOC)) {
echo "<option value=".rawurlencode($row[items]).">" . $row['items'] . "</option>";
}?>
</select>
</form>
<?php
mysqli_free_result ($results); // Free up the resources.
}
?>
答案 0 :(得分:0)
实际上,触发的请求将再次编码您的text / url。因此,space
的html编码为%20
,而%
的html编码为%25
。所以我希望您的网址为%2520
,而不是%20
。
因此要解决删除手动编码并让请求处理编码。
我希望它清楚并为你工作。!