1

フォームを使用して、フィールドに入力されたデータを収集します。を使用しonsubmitて、別のページにデータを送信して同じページを表示します。

つまりpage1.php、2 つの入力フィールドがあります。

 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']; 

ただし、2 番目のものは、アドレス バーから直接入力すると、 のような単純な値やその他の小さな部分文字列を1出力します。ab

$_GET変数を直接使用するだけでなく、$randomValueすべての手段を使用してみました - echoprint_rおよびvar_dump.

ある場合には。最初の '#' までの部分文字列が出力され、それよりも小さな文字列だけが出力されます。一部の特殊文字が原因で、目的の結果を得ることができませんか?

PS: これonsubmitは、通常使用される標準フォーム、送信ボタン、および onsubmit イベントについて説明したいことです。

サンプル URL:?pageNo=a&someRandomValue=aslkfdjslfhdskljOU#OsssssssIU#IO$U#IO$

2番目のものを単独で印刷すると、次のようになります。aslkfdjslfhdskljOU

4

1 に答える 1

3

理由

urlencodeサンプル URL にはハッシュがあります。これらは、php の関数を使用して URL エンコードする必要があります。これは、シンボルがURL#のセクションとして知られているものを表すために使用されているためです。fragmentハッシュの後のものはブラウザ側で使用され、サーバーには送信されません。

フラグメントの詳細については、次を参照してください。

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 に答える