encode_hint、リクエストの文字コードの変換についてencode_hint、リクエストの文字コードの変換についてメモ。pukiwikiはencode_hintというhidden属性な値をform内に埋め込む。これはplugin.php内で結構強引にやっている。formがあったら、replaceでhiddenな値をつっこんでいる。以下、当wikiの内部エンコードはUTF8であることを前提とする。GET、POSTな値はinput_filterを通してnull文字は削除される。その後、変換処理が行われるのだが、GETとPOSTで異なる。POSTの場合、encode_hint、charsetのいずれかがリクエストにあったら、その値を元にリクエストの文字コードを判定、内部エンコード(SOURCE_ENCODING)に変換する。「ぷ」が設定されているのだが、この文字で判定を失敗することはないらしい。これらの値がない場合はauto(自動判定)で内部エンコードに変換する。$_LANG['encode_hint']['ja']を空にしていたりすると、この処理がされてしまう。携帯(SJIS)から投稿、内部がUTF8だったりすると、文字化けする可能性がある。GETの場合だが、encode_hintがあればPOSTと同様の変換処理をする。ない場合は何もしない。GETの場合はパラメータが内部エンコードでエスケープされていることを前提にしているからである。この「何もしない」というのが、以下の場合において問題となる。ケー環境の場合、SJISでページを表示する。formのmethodをGETにし、encode_hintをつけない場合、form送信時におもいっきり問題が発生する。変換処理を何もしない為、内部で取得できる文字がSJISになってしまうからだ。回避方法はencode_hintをつけるか、POSTにしてしまう。formのmethodは必ずPOSTにするという解決方法でいいかと思う。POSTの値がautoで変換される処理だが、encode_hintをつけないのなら、端末判定から文字コードを決定するのが確実でしょう。いう感じに修正しました。