![]() |
![]() ![]() ![]() |
日本語のようなマルチバイト文字を扱うためには、mbstringモジュールをWebサーバーにインストールする必要があります。
mb_***()関数はマルチバイト文字の操作を提供し、いくつかのmb_を持たない関数は正しくマルチバイト文字を処理できないため、mb_***()関数に置き換える必要があります。
主な重要関数は以下となります。
=== 主なマルチバイト関数の変換 === (非推称 -> 推称) mail() -> mb_send_mail() strlen() -> mb_strlen() strpos() -> mb_strpos() strrpos() -> mb_strrpos() substr() -> mb_substr() str_replace() -> mb_ereg_replace() strstr() -> mb_strstr() strtolower() -> mb_strtolower() strtoupper() -> mb_strtoupper() ereg() -> mb_ereg() または preg_match() eregi() -> mb_eregi() または 'i'を使った preg_match() ereg_replace() -> mb_ereg_replace() または preg_replace() eregi_replace() -> mb_eregi_replace() または 'i'を使った preg_replace() split() -> mb_split() または preg_split() 全てのマルチバイト関数については、 PHPマニュアル - マルチバイト文字列 関数を参照してください。 全ての非推称の関数については、 PHPマニュアル - PHP 5.3.x で推奨されない機能を参照してください。* mbstring.func_overloadビットフラグを使うことで、非推称の関数のいくつかをオーバーロードされたマルチバイト関数として使用できます。
ユーザーロケール(ユーザーの言語と地域)を日付操作や文化依存の書式(日付、通貨...)に適用させるには、setlocale関数を呼ぶ必要があります。
$locale = "en_US.UTF-8" or "ja_JP.UTF-8"... これらはHTTPヘッダー(Accept-Language)、もしくは保存されたアカウント情報から取得する必要があります。 setlocale(LC_ALL, $locale); ... 全てのロケール対応関数用 例) gettextリソースの切り替え setlocale(LC_TIME, $locale); ... 日付のローけー屡対応関数用 例) 日付関数の書式の切り替え
ロケール対応関数はsetlocale関数によってフォーマット(書式)を切り替えることができます。
setlocale(LC_TIME, "en_US.UTF-8"); strftime('%c'); ... 'Mon 01 Jan 2012...'を返します。(英語書式) setlocale(LC_TIME, "ja_JP.UTF-8"); strftime('%c'); ... '2012年1月1日...'を返します。(日本語書式) *'%c'は、ロケール対応書式のパターンです。
多言語でグローバル化されたwebサービスで時間を処理するには、GMT/UTCを使うことが推称されます。
date_default_timezone_setを使うことで、全てのユーザー活動を共通時間で管理し、各ユーザーのタイムゾーンに変換することができます。
GMT/UTCの処理については、サーバーサイドプログラミングを参照してください。
$timestamp = strtotime(gmdate("Y-m-d H:i:s")); ... GMT/UTC タイムスタンプ date_default_timezone_set("Asia/Tokyo"); ... 日本のタイムゾーンを設定 strftime('%c', $timestamp); ... 日本の現地時間を返す date_default_timezone_set("America/Los_Angeles"); ... アメリカのタイムゾーンを設定 strftime('%c', $timestamp); ... アメリカの現地時間を返す* ユーザーのタイムゾーンはユーザーアカウント情報から取得すべきです。ログインしていないユーザーについては、アクセスIPのエリアか、ユーザーのWebブラウザのJavaScriptで知ることができます。