"+"を含む文字列をURL上で受け渡す方法を教えてください。
urlencodeは半角スペースを"+"に変換します。このため"+"の文字列を含む文字列をurldecodeすると、"+"が半角スペースになってしまいます。現在は、str_replaceで半角スペースを"+"に置換していますが、本来の半角スペースと区別が付きません。
うちの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' としておいて ' ' -> '+' とすればこの部分に関しては同じ結果になります。(戻す時は、先に '+' -> ' ')
2回str_replaceするのは賢いですね。確実な方法をありがとうございます。
urlencodeしたら半角スペースが+になるのも、ueldecodeで+が半角スペースになるのも仕様です。
URLに+があってもそれはurlencodeすれば%2Bになるはずです。%2Bをurldecodeすれば+に戻るので区別がつかなくなることはありません。
なるほど、当初の+とは区別できることが分かりました。
これならばstr_replaceで置換しても、不具合は解消できそうです。試してみます。