4
http://localhost/foo/profile/%26lt%3Bi%26gt%3Bmarco%26lt%3B%2Fi%26gt%3B

上記の URL から が得られます404 Error。URL コードは this:urlencode(htmlspecialchars($foo));です$foo<i>badhtml</i>

たとえば、エンコードするものが何もない場合、URLは正常に機能しmarcoます。

ありがとう。=D

更新: uri のエンコードされた部分でセグメントをキャプチャすることになっているため、404 は表示されません。

そこにはドキュメントはありません。marco単に、その人の情報をデータベースから取得するために必要な文字列です。ユーザーが存在しない場合でも、その醜いエラーはスローされません。

何が問題なのかちょっとした考え:を使用した場合、問題なく動作することがわかりましたが、<i>badhtml<i>うまく動作しませ<i>badhtml</i>ん。/<i>

おそらく、リクエストは次のように考えられますhttp://localhost/foo/profile/<i>badhtml<**/**i>

4

3 に答える 3

2

パラメータにスラッシュがあるため/、これはパス名の区切り文字として解釈されます。

したがって、解決策は、スラッシュのすべての出現箇所を、区切り文字として解釈されないものに置き換えることです。\u2044か何か。また、パラメータを読み戻すときは、すべて\u2044のsを通常のスラッシュに戻します。

\u2044この文字は通常のスラッシュに非常に似ているため、選択しましたが、もちろん、パラメーターでは発生しないものを使用できます。)

于 2012-06-20T09:52:08.780 に答える
1

URL 書き換えの処理を担当する正規表現が、URL エンコードされた文字列の一部の文字を気に入らない可能性が最も高いです。これはおそらく、PHP ではなく、httpd/apache に関する質問です。あなたの最善の推測は、.htaccess(URL 書き換えルールを含むファイル) を調べることから始めることです。

この質問は、という名前のファイルにアクセスするのではなく、URL を介して引数を渡そうとしていることを前提としています<i>badhtml</i>

于 2012-06-20T09:28:12.690 に答える
-1

リスターさん、あなたは揺れました。

「したがって、解決策は、スラッシュのすべての出現箇所を区切り文字として解釈されないものに置き換えることです。\u2044 または何か。そして、パラメーターを読み戻すときに、すべての \u2044 を通常のスラッシュに戻します。」

于 2014-09-04T14:35:40.453 に答える