PHP、デフォルトエンコーディングをUTF-8へ (default_charset)

PHP: Hypertext Preprocessor

PHP開発チームはPHP6におけるUTF-16化を断念。開発ブランチをPHP5.3へロールバックし、これまでに開発した機能をロールバックしたブランチへバックポートするという方針へ変更した。これはPHP6で取り組まれたUTF-16対応実装が予想以上に困難だったためと、UTF-16に移行することで得られる利益よりも不利益が多いことが判明したためだ。PHPにおける文字集合とエンコーディング回りの議論は振り出しに戻った。

しかし、変化は確実に訪れている。Mind the encodings!において「default_charset」がiso-8859-1からUTF-8へ変更されたことが紹介されている。ブラウザはサーバからのデータにエンコーディングの指定がなかった場合、これまではISO-8859-1をデフォルトエンコーディングとしていた。逆にPHPがブラウザからデータを受け取る場合もISO-8859-1をデフォルトエンコーディングとしてきた。今回、この部分のデフォルトがUTF-8に変更された。

わかりやすいところでは、コメントアウトされているがphp.iniの「default_charset = "iso-8859-1"」がそれに該当する。62101のコミットで同設定が「default_charset = "UTF-8"」と変更された。なお設定自身はコメントアウトされており、より正確には、「default_charset」が設定されていない場合のデフォルトエンコーディングがISO-8859-1からUTF-8に変更されたということになる。これまでエンコーディングの指定がなかった場合ISO-8859-1として処理されてきたクライアントから送られてくるデータはデータはUTF-8として処理されることになる。

Googleの調査によればWebで使われるテキストのエンコーディングはここ数年でUTF-8が急増しており、その割合は50%に到達するとみられている。UTF-8は今後も急増が見込めることから、今回の変更は妥当なものだとみられる。なお、これまでISO-8859-1を仮定した実装をしてきた場合には注意が必要。明示的にエンコーディングを指定するにはPHPコードの先頭で「ini_set('default_charset', $enc);」や「header("Content-type: text/html; charset=$enc");」などを実施すればいいという。なおこれは受け取るデータのエンコーディングの指定であって、スクリプトそのもののエンコーディングを指定するものではないし、データベースとやりとりするデータのエンコーディング指定でもないということに注意する必要がある。



転職ノウハウ

あなたが本領発揮できる仕事を診断
あなたの仕事適性診断

シゴト性格・弱点が20の質問でサクッと分かる!

「仕事辞めたい……」その理由は?
「仕事辞めたい……」その理由は?

71%の人が仕事を辞めたいと思った経験あり。その理由と対処法は?

3年後の年収どうなる? 年収予報
3年後の年収どうなる? 年収予報

今の年収は適正? 3年後は? あなたの年収をデータに基づき予報します。

激務な職場を辞めたいが、美女が邪魔して辞められない
激務な職場を辞めたいが、美女が邪魔して辞められない

美人上司と可愛い過ぎる後輩に挟まれるエンジニアの悩み

人気記事

一覧

イチオシ記事

新着記事