使用$ _GET丢失价值

时间:2013-03-13 18:04:58

标签: php get urlencode

我使用表单,收集在其字段中输入的数据。使用onsubmit我将数据发送到另一个页面以显示相同内容。

即。 page1.php有两个输入字段:

 pageNo = 1 //id and name of the input text field are the same, `pageID`

 //id and name of the input text field are the same, `someRandomValue`
 someRandomValue = "A long character string consisting of every possible character that can be typed from the keyboard" 

我使用page2.php$_GET [页面名称仅用于显示目的]中收到以上内容:

//on `echo` displays the desired result
$pageID = $_GET['pageNo']; 

// on `echo` does not print anything
$randomValue = $_GET['someRandomValue']; 

但是,当通过地址栏直接输入时,第二个打印的值就像1ab和其他小子串一样简单。

我尝试使用$_GET变量以及$randomValue使用所有方法 - echoprint_rvar_dump

在某些情况下。打印到第一个'#'的子字符串,以及仅用于较小字符串的子字符串。是因为某些特殊字符,我无法获得所需的结果吗?

PS:onsubmit就我所说的标准表单,提交按钮和通常使用的onsubmit事件而言。

示例网址:?pageNo=a&someRandomValue=aslkfdjslfhdskljOU#OsssssssIU#IO$U#IO$

当我单独打印第二张时,我得到:aslkfdjslfhdskljOU

1 个答案:

答案 0 :(得分:3)

原因

在您的示例网址中,您有哈希值,这些需要使用php的urlencode函数进行网址编码。原因是#符号用于表示URL的fragment部分。散列后的任何内容都在浏览器端使用,并且永远不会发送到服务器。

有关片段内容的更多信息,请参见此处:

http://en.wikipedia.org/wiki/Fragment_identifier

有关urlencode的更多信息:

http://uk.php.net/urlencode


解决方案

您的示例查询字符串:

?pageNo=a&someRandomValue=aslkfdjslfhdskljOU#OsssssssIU#IO$U#IO$

URL编码后,应显示以下网址:

?pageNo=a&someRandomValue=aslkfdjslfhdskljOU%23OsssssssIU%23IO%24U%23IO%24

注意:您应该分别对名称 - 值对的每个部分进行URL编码,因此:

$qry = '?' . urlencode('pageNo') . '=' . urlencode('a') . 
  '&' . urlencode('someRandomValue') . 
  '=' . urlencode('aslkfdjslfhdskljOU#OsssssssIU#IO$U#IO$');

显然,如您所知,URL的大多数部分都是硬编码的(并且不包含任何非法字符),您只需执行以下操作即可逃脱:

$qry = '?pageNo=' . urlencode('a') . 
  '&someRandomValue=' . urlencode('aslkfdjslfhdskljOU#OsssssssIU#IO$U#IO$');

或者更可能在php中更有用:

$qry = '?pageNo=' . urlencode($pageNo) . 
  '&someRandomValue=' . urlencode($someRandomValue);


另一种方式

如果您使用的是PHP 5或更高版本,则可以使用以下函数,它需要一个普通的PHP数组并将其转换为正确编码的查询字符串:

http://uk.php.net/manual/en/function.http-build-query.php

$data = array(
  'pageNo' => $pageNo,
  'someRandomValue' => $someRandomValue,
);

$qry = http_build_query( $data );

然而,没有比知道自己发生了什么更好的事情。因此,在使用上述内容之前,最好先了解一下URL的构成方式,并可能将自己的http_build_query版本编写为学习测试。

http://webdesign.about.com/od/forms/a/url_encoding.htm