PHPで現在のURLがエンコードされたURLかどうかを判定する方法はありますか?
そもそもApacheなどでデコードされてしまい、PHPで扱う頃にはデコードされてしまってるのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答2件
0
リクエストパラメータ・セッションに関するまとめから抜粋して「デコード前→デコード後」という形式で簡潔に説明すると
・$_SERVER['QUERY_STRING']
→ $_GET
・file_get_contents('php://input')
→ $_POST
・$_SEREVR['HTTP_COOKIE']
→ $_COOKIE
こんな感じです。デコードの際の特徴として 「可能な限りデコードしようとする」 というのも重要ですね。これは urldecode
関数の挙動と一致します。以下のコードを実行してみてください。
lang
1$p = [ 2 '%E3%81%82%E3%81%84%E3%81%86', 3 '%E3%81%82い%E3%81%86', 4 '%25%25%25', 5 '%%25%', 6]; 7print_r(array_map('urldecode', array_combine($p, $p)));
PHPで現在のURLがエンコードされたURLかどうかを判定する方法はありますか?
・多くのWebブラウザはURL欄にマルチバイト文字や特殊記号が入力されると、送信するタイミングで自動的にURLエンコードします。但し、エンコードされていることはユーザに対しては隠蔽されます。
・「LiveHTTPHeaders」といったFirefoxのアドオン等を使えば、こういった干渉を受けずにそのままのリクエストを送ることが可能です。
・PHPでは受け取るときに 「可能な限りデコードしようとする」 ポリシーに従ってデコードしているため、$_GET
$_POST
$_COOKIE
は全てデコードされた状態として考えて良いと思われます。
投稿2014/11/17 10:32
総合スコア5223
0
具体的にどのような処理を想定しているのかわかりませんが、通常、エンコード状態かどうかを動的に判定することはほとんどないかと思います。
ブラウザ的にはエンコードされていないものをリクエストすることは基本的にないかと思います。
PHPとしても、$_GET
、$_POST
などの変数にはデコードされた状態で入っているはずです。
http://php.net/manual/ja/reserved.variables.get.php
また、「現在のURL」というのが何を意味しているのか不明瞭ですが、アクセスされているURL全体ということであれば、URLエンコードされた状態のものをPHP側から直接参照することは基本的にない(デコード済み)と思います。
URLエンコードを意識する必要があるのは、パラメータ($_GET
などで取得するもの)の中で、多重にURLエンコードする必要がある場合くらいでしょうか。この場合でも動的に判定するのではなく、多重にURLエンコードしているという仕様で、固定的にデコード処理することになると思います。
投稿2014/11/17 07:05
総合スコア1356
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。