1

我使用一个表格,收集在其字段中输入的数据。使用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_rvar_dump

在某些情况下。打印到第一个 '#' 的子字符串,对于较小的字符串也是如此。是不是因为一些特殊字符,我无法获得想要的结果?

PS:这onsubmit就是我想说的标准表单、提交按钮和通常使用的onsubmit事件。

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

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

4

1 回答 1

3

原因

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

有关片段是什么的更多信息,请参见此处:

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

有关 urlencode 的更多信息:

http://uk.php.net/urlencode


解决方案

您的示例查询字符串:

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

一旦 URL 编码 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

于 2013-03-13T18:24:30.857 回答