電子書籍の厳選無料作品が豊富!

プログラム初心者です

デコードについておしえてください

検索結果のページングでエンコードとデコードを使おうと思っています

urldecodeは、文字列中にエンコードされた文字がなくても大丈夫ですか?

例えば、これだとデコードできますが
$search = urldecode("%E3%81%82");

これでも問題ないでしょうか?(デコードする文字がありませんみたいなエラーはありませんか?)
$search = urldecode("あ");

使い方おかしい!とかありましたらよろしくお願いします

質問2
試しにエンコードしないでページングしたらIE8で成功してしまったのですが、やっぱりエンコードしたほうがいいですよね?(対応できないブラウザはありますか?)

A 回答 (2件)

質問1:


http://php.net/manual/ja/function.urldecode.php
ここに書いてある通り、urldecode はエンコード文字
%## とプラス記号 ('+') を変換するだけの機能で、
他の文字は放置されます。変換対象がないからと
いってエラーになることもありません。

質問2:
URLに使用できる文字というのは決まっています。
URLエンコードとは 『URLに使用できない文字を、使
用できる文字の範囲に収まるように変換する』操作
です。

URLとして使う文字は全てエンコードすべきです。
ブラウザによってはURLに使えない文字でも問題なく
動くこともありますが、それは『親切なブラウザだね』
程度に考えておきましょう。

※エンコードの問題は、ブラウザよりもサーバのほうで
 ダメになるパターンのほうが多いですよ。
    • good
    • 0
この回答へのお礼

回答ありがとうございます
>質問1
これで安心して使えます。ありがとうございました
>質問2
サーバのほうでもダメになるのですね
全てエンコードするようにしました。

お礼日時:2014/02/23 21:12

urldecode関数はデコード可能な部分のみデコードする関数です。



Qiita - [PHP] リクエストパラメータ・セッションに関するまとめ
http://qiita.com/mpyw/items/7852213f478e8c5a2802

こちらの記事で詳しく書いているのでご覧ください。GETに関して、

「パーセントエンコードされていない 半角スペース と 改行 と NULLバイト の混入は一切認められない。」

と書きましたが、これはリクエストヘッダーレベルで見たときのことを指します。ブラウザがリクエストヘッダーを生成する段階で自動的に無効な文字列をエンコードするように実装されていれば問題なく処理されるでしょう。ですがこれに依存するのは互換性を考えると当然避けるべきです、基本的にはすべてurlencode関数もしくはrawurlencode関数を通すようにしましょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます
エンコードすることにしました。リクエストパラメータも奥が深いですね。勉強になりました

お礼日時:2014/02/23 21:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!