使用get请求的Url特殊字符

时间:2013-10-10 10:39:30

标签: php html special-characters html-form url-encoding

当我点击下面代码呈现的页面上的提交按钮时,我希望我的网址看起来像 locl.cms.com/upload/season.php?sid=20&currentPage=1

echo '<form action="" method="get"> 
  <button id="previouspage" name="'.$encodedURL.'" type="submit" 
    value="'.$page.'">Previous Page</button> 
  <button id="nextpage" name="currentPage" type="submit" 
    value="'.$pageN.'">Next Page</button> 
  </form>'; 
echo "Inside Div"; 
echo '</div>'; 

其中

$url='sid='.$sid.'&currentPage';
$encodedURL=urlencode($url);

当我点击Previous Page按钮时,我的网址变为locl.cms.com/upload/season.php?sid%253D20%2526currentPage=1

我做错了什么?

1 个答案:

答案 0 :(得分:0)

当您使用method="get"提交表单时,表单的action属性将成为URL,并且包含按钮的表单输入元素会为附加到URL的name=value查询字符串做出贡献,然后被发送到服务器。这里的名称和值将被URL编码(这就是你在OP中看到的特殊字符)。

// The URL making pseudo code ( run by the browser )

if ( form.method is-fully-qualified-with-protocol-etc )
    base_url = form.action
elseif ( form.action is-full-path-begining-with-forward-slash )
    base_url = page.protocol+'://'+page.url.hostname+':'page.url.port+form.action
elseif ( form.action is-a-relative-path-or-blank )
    base_url = page.url+form.action

encoded_form_input = ''
for-each ( form.input_elements as input_element )
    encoded_form_input += urlencode(input_element.name) + '=' + urlencode(input_element.value) + '&'

final_url = base_url + '?' + encoded_form_input;

编码到URL中的输入集的一个例外是button输入,它只是您按下的按钮。其他按钮被忽略。

这有希望给你一些指示,指出为什么你没有得到你期望的URL。