PHPでの文字化け2

| コメント(0)

PHPでは、Magic Quotes GPC(GPCとはGet Post Cookieの意味)という設定があります。この設定をonにすると、「'(シングル・クォテーション)」や「"(ダブル・クォテーション)」、「\」(「\」)を含む文字列があると、GetなりPostで受信した文字列に対して自動的にエスケープしてくれるというものです。例えば「John's name」を「John\'s name」と処理してくれるため、データベースなどに登録する際にエラーにならないというものです。一見すると非常に親切そうですが、実は厄介な問題を孕んでいます。この章で述べたとおり、Shift_JISでプログラミングすると、「5C = \」が現れる文字が存在します。このような場合、「十和田湖」「能力」「申し込み」「表示」などの文字列はPOSTなりGETで受信するたびに、「十\和田湖」「能\力」「申\し込み」「表\示」などのようにエスケープされていますから、そのまま表示してしまうと不細工極まりませんので、必ず stripslashesしなければなりません。

このMagic Quotes GPCの問題を考えても、Shift_JISでプログラミングするのは、文字コード全般の知識を有している場合やi-モードサイトの構築などでどうしても避けられない場合などを除いては避けるべきです。(もちろんMagic Quotes GPCをoffにすれば、この問題は発生しません。あなたがサーバの管理者でない場合も、.htaccessで設定可能です。「php_flag magic_quotes_gpc off」とすればOKです。データベース登録時には、addslashesなどの処理が必要です。)

コメントする