コンテンツへスキップれこえぬ。勉強TweetPocket先日、PHPプログラミングしていて困ったことがあったのでシェアします。PHPでは対処が簡単[ads1]フォームでデータを取り扱う必要があったとある案件で、一つのフォームでファイルと文字の両方を送信せねばならない状態で、普段私が使っているようなデータを扱うときだけ別窓で送信させるという手法も使えない状態でした。“multipart/form-data”と属性を設定したformでPOSTさせたところ、文字化けが起こってしまったのです。エンコードを確認するとUTF-8。文字化けしたと思っていたが実は文字化けしていない、いやでもしかし文字化け・・・?という奇妙な状態。再エンコードを掛けて見るも、どれもうまくいかず。悩んでいたが、文字化けした文字をASCIIで出させてやっと原因がわかった。犯人は、HTML_ENTITIES実は、enctype=”multipart/form-data”としたときは、文字がエンコードされずに送信されるわけですが、そのときはマルチバイト文字はどうやって表現されているのでしょうか。HTML_ENTITIESです。HTML_ENTITIESはHTMLで特殊文字などを表示させるときに使う文字参照だと思っていたのですが、どうやら日本語などマルチバイト文字はこの場合文字参照の状態で送信されてしまうようです。それがPHP側ではUTF-8として認識してしまうわけだから何のエラーも出ず文字化けしてしまうわけ。幸いにも、PHPでこの問題に出会ってしまったときには簡単に対応できます。私の場合は次の対処法をおすすめしています。encodingにHTML_ENTITIESを指定するだけで簡単に望みの文字コードに変換することが出来ます。【お知らせ】更新再開します。aThemes.%d人のブロガーが「いいね」をつけました。