PHPのurlencode、urldecodeについて質問です。

"+"を含む文字列をURL上で受け渡す方法を教えてください。

urlencodeは半角スペースを"+"に変換します。このため"+"の文字列を含む文字列をurldecodeすると、"+"が半角スペースになってしまいます。現在は、str_replaceで半角スペースを"+"に置換していますが、本来の半角スペースと区別が付きません。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/12/19 02:30:17
  • 終了:2007/12/24 12:27:44

回答(3件)

id:o2aholic No.1

o2aholic回答回数3ベストアンサー獲得回数02007/12/19 04:24:47

ポイント27pt

http://oshiete1.goo.ne.jp/qa3384201.html

phpは全然詳しくないのですがrawurlencodeを使うと良いようですよ。

id:ibun08

これならばstr_replaceで置換しても、不具合は解消できそうです。試してみます。

2007/12/20 19:14:02
id:tezcello No.2

tezcello回答回数457ベストアンサー獲得回数682007/12/19 08:44:04

ポイント27pt

うちのPHP5.2.4 では

$str = 'http://www.hoge.com?fuga=abc&abc= +123';
var_dump(urlencode($str));

結果は、

string(54) "http%3A%2F%2Fwww.hoge.com%3Ffuga%3Dabc%26abc%3D+%2B123" 

となるのですが、質問者さんのところではこうなりませんか?

' ' -> '+'

'+' -> '%2B'

のように置換えてくれるので、ごっちゃにならないと思うのですが。

http://jp2.php.net/manual/ja/function.urlencode.php


str_replace() で変換するのなら、先に '+' -> '%2B' としておいて ' ' -> '+' とすればこの部分に関しては同じ結果になります。(戻す時は、先に '+' -> ' ')

id:ibun08

2回str_replaceするのは賢いですね。確実な方法をありがとうございます。

2007/12/20 19:23:19
id:y-kawaz No.3

y-kawaz回答回数1419ベストアンサー獲得回数2252007/12/19 12:42:27

ポイント26pt

urlencodeしたら半角スペースが+になるのも、ueldecodeで+が半角スペースになるのも仕様です。

URLに+があってもそれはurlencodeすれば%2Bになるはずです。%2Bをurldecodeすれば+に戻るので区別がつかなくなることはありません。

http://q.hatena.ne.jp/answer

id:ibun08

なるほど、当初の+とは区別できることが分かりました。

2007/12/20 19:11:35

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません