/ にハマった。

getメソッドで値をurlの一部として渡すとき php だと urlencode とか rawurlencode を通すのだが、 そうすると / が %2F に変換されてしまう。 これをwikipediaに渡すとはまる。

空白文字や多バイト文字はエンコードしなきゃダメなんでしょ、と思っていたのだが、 今ではURLそのものが空白文字や多バイト文字を含んでいても全然問題ないらしい。 てか、何もしない方がまともに動く。 phpapache かブラウザレベルでうまいことやってくれてるのかは知らん。 もしかするとずっと昔に、日本語ドメインとかが可能になった頃からとっくに規格化されたのかもしれん。

ただし、getメソッドで値渡しするときは別。 そういうときだけ urlencode を通しておけば良い、それ以外はいらんことするな、そのまま流せ、ということらしい。 それって常識ですか。 今まで知らんかった。