我使用表单,收集在其字段中输入的数据。使用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'];
但是,当通过地址栏直接输入时,第二个打印的值就像1
,ab
和其他小子串一样简单。
我尝试使用$_GET
变量以及$randomValue
使用所有方法 - echo
,print_r
和var_dump
。
在某些情况下。打印到第一个'#'的子字符串,以及仅用于较小字符串的子字符串。是因为某些特殊字符,我无法获得所需的结果吗?
PS:onsubmit
就我所说的标准表单,提交按钮和通常使用的onsubmit事件而言。
示例网址:?pageNo=a&someRandomValue=aslkfdjslfhdskljOU#OsssssssIU#IO$U#IO$
当我单独打印第二张时,我得到:aslkfdjslfhdskljOU
答案 0 :(得分:3)
在您的示例网址中,您有哈希值,这些需要使用php的urlencode
函数进行网址编码。原因是#
符号用于表示URL的fragment
部分。散列后的任何内容都在浏览器端使用,并且永远不会发送到服务器。
有关片段内容的更多信息,请参见此处:
http://en.wikipedia.org/wiki/Fragment_identifier
有关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
版本编写为学习测试。