2

クエリ文字列を介してエンコードされた URL を取得しています。次のページにもう一度渡す必要があります。を使用して初めて取得すると$_REQUEST['url']、スラッシュのみがデコードされます。

http://example.com/search~S10?/Xllamas&searchscope=10&SORT=D/Xllamas&searchscope=10&SORT=D&SUBKEY=llamas/51%2C64%2C64%2CB/browse

urldecodeのphp docs ページでは、リクエスト データをデコードしないようにアドバイスしており、既にデコードされていると述べています。一部の部分を二重にエンコードせずに再度エンコードできるように、完全にデコードするか、まったくデコードしない必要があります。

このデータに関する私の経験が php ドキュメントと一致しない理由がわかりません。同じことへの助けや指針に感謝します!!

編集:関連するコードを投稿しようとします。これは散らばっています:

URL はエンコードされ、クエリ文字列に追加されます (smarty テンプレートを使用した html ファイル内):
<a class="button" href="{$baseurl}search_nojs?searcharg={$searcharg|escape:'url'}&url={$next|escape:'url'}"><span>Next&gt;&gt;</span></a>

そのリンクをたどった場合、クエリ文字列から URL を取得しています (php ファイル内):

       if(array_key_exists('url', $_REQUEST)) {
            $sm->assign("searchurl", $_REQUEST['url']);
        }

次に、次のリンク (別の html ファイル内) のクエリ文字列に URL を貼り付けたいと思います。
href="{$baseurl}detail?bibid={$res.bibid}&searcharg={$searcharg}{if $searchurl}&searchurl={$searchurl}{/if}"

{$searchurl}また、ページに直接印刷して、同じ半分エスケープした結果を得ています。

クエリ文字列と取得したデータの別の例を次に示します$_REQUEST

最初にクエリ文字列にエンコードされた URL:
searcharg=mammals&url=http%3A%2F%2Fexample.com%2Fsearch%7ES10%3F%2FXmammals%26searchscope%3D10%26SORT%3DD%2FXmammals%26searchscope%3D10%26SORT%3DD%26SUBKEY%3Dmammals%2F51%252C1114%252C1114%252CB%2Fbrowse

から取得したデータ$_REQUEST:
searcharg=mammals&searchurl=http://example.com/search~S10?/Xmammals&searchscope=10&SORT=D/Xmammals&searchscope=10&SORT=D&SUBKEY=mammals/51%2C1114%2C1114%2CB/browse

この方法は奇妙に思えるかもしれませんが、ブラックボックス データベースを使用してモバイル ディスプレイを作成しようとしています。助けてくれてありがとう!

4

2 に答える 2

1

クエリ文字列と $_REQUEST から取得したデータの別の例を次に示します。

最初にクエリ文字列にエンコードされた URL: searcharg=mammals&url=http%3A%2F%2Fexample.com%2Fsearch%7ES10%3F%2FXmammals%26searchscope%3D10%26SORT%3DD%2FXmammals%26searchscope%3D10%26SORT%3DD%26SUBKEY%3Dmammals% 2F51%252C1114%252C1114%252CB%2F閲覧

これは二重にエンコードされています。例:%252C -> %2C -> , したがって、url パラメーターをエンコードする時点で、二重エンコードが導入されます。おそらく、パラメーターをエンコードする前に、デコードできなくなるまでデコードすることを確認する必要があります (別名正規化)。urldecodeこれにはループで使用できます。

また、url パラメーターを (リンクとして) html コンテキストに戻すときに、HTML 属性もエスケープするようにする必要があります。そうしないと、XSS の脆弱性が発生します。

于 2010-05-14T21:01:10.277 に答える
0

コンマ (U+002C) はクエリの予約文字であるため、次のようにエンコードする必要があります%2C

3.4。クエリ コンポーネント

クエリ コンポーネントは、リソースによって解釈される情報の文字列です。

  query         = *uric

クエリ コンポーネント内では、文字 " ;"、" /"、" ?"、" :"、" @"、" &"、" ="、" +"、" ,"、および " $" は予約されています。

于 2010-05-14T18:43:13.673 に答える