HTML表单提交双重URL从%20编码到%2520

时间:2014-03-26 00:09:03

标签: java php html forms hyperlink

我正在使用数据库中的数据创建一个简单的下拉表单。在下拉菜单中,我向用户显示选项,并为每个选项的值编码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.    
  }
?>

1 个答案:

答案 0 :(得分:0)

实际上,触发的请求将再次编码您的text / url。因此,space的html编码为%20,而%的html编码为%25。所以我希望您的网址为%2520,而不是%20

因此要解决删除手动编码并让请求处理编码。

我希望它清楚并为你工作。!