第1回WordPressお茶会 – WordBench香川 – PHP環境設定


日本語などマルチバイト文字列関数設定の為にPHPの設定ファイルphp.iniを編集します。
各環境のphp.iniの場所及びPHPの設定一覧のURLは以下の通りです。

Windows7 64bit環境
c:¥xampp¥php¥php.ini
http://localhost/xampp/phpinfo.php
Mac OS X 64bit環境
/Applications/MAMP/bin/php/php5.3.6/conf/php.ini
(MAMP2.0.5にはPHP5.2.17とPHP5.3.6がインストールされていますが今回は5.3.6を使用します)
http://localhost/mamp/phpinfo.php

Windows用拡張モジュールについて

Windows7 64bit環境ではWindows用のマルチバイト文字列関数の拡張モジュールを必要としますのでphp.iniで “extension=php_mbstring.dll” を検索してコメントアウトされている場合はアンコメントしてください。(XAMPP1.7.7では既にアンコメントされていると思います。)
PHP: Windows 用 PHP 拡張モジュール – Manual

[php.ini](変更前)

;extension=php_mbstring.dll

[php.ini](変更後)

extension=php_mbstring.dll

マルチバイト文字列関数設定

では、マルチバイト文字列関数の設定を行なっていきます。
php.iniで [mbstring] を検索してください。

[php.ini]

	[mbstring]
	; language for internal character representation.
	; http://php.net/mbstring.language
	;mbstring.language = Japanese
	
	; internal/script encoding.
	; Some encoding cannot work as internal encoding.
	; (e.g. SJIS, BIG5, ISO-2022-*)
	; http://php.net/mbstring.internal-encoding
	;mbstring.internal_encoding = EUC-JP
	
	; http input encoding.
	; http://php.net/mbstring.http-input
	;mbstring.http_input = auto
	
	; http output encoding. mb_output_handler must be
	; registered as output buffer to function
	; http://php.net/mbstring.http-output
	;mbstring.http_output = SJIS
	
	; enable automatic encoding translation according to
	; mbstring.internal_encoding setting. Input chars are
	; converted to internal encoding by setting this to On.
	; Note: Do _not_ use automatic encoding translation for
	;       portable libs/applications.
	; http://php.net/mbstring.encoding-translation
	;mbstring.encoding_translation = Off
	
	; automatic encoding detection order.
	; auto means
	; http://php.net/mbstring.detect-order
	;mbstring.detect_order = auto
	
	; substitute_character used when character cannot be converted
	; one from another
	; http://php.net/mbstring.substitute-character
	;mbstring.substitute_character = none;
	
	; overload(replace) single byte functions by mbstring functions.
	; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
	; etc. Possible values are 0,1,2,4 or combination of them.
	; For example, 7 for overload everything.
	; 0: No overload
	; 1: Overload mail() function
	; 2: Overload str*() functions
	; 4: Overload ereg*() functions
	; http://php.net/mbstring.func-overload
	;mbstring.func_overload = 0
	
	; enable strict encoding detection.
	;mbstring.strict_detection = Off
	
	; This directive specifies the regex pattern of content types for which mb_output_handler()
	; is activated.
	; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml)
	;mbstring.http_output_conv_mimetype=
	
	; Allows to set script encoding. Only affects if PHP is compiled with --enable-zend-multibyte
	; Default: ""
	;mbstring.script_encoding=
	

上記がXAMPP環境でのマルチバイト文字列関数の設定箇所となります。MAMP環境でも表記の違い等はありますが設定する項目は同様ですのでこちらをもとに設定を行なっていきます。
ハイライトされている行が設定する項目となります。各項目の詳細に関してはPHPマニュアル、参考サイトを御覧ください。

なお、デフォルトでのmbstringの設定を http://localhost/xampp/phpinfo.php より確認すると以下の通りとなっています。

ではphp.iniのmbstringの設定を編集していきます。

デフォルト言語を日本語に設定します。mbstring_languageをアンコメントします。

	;mbstring_language = Japanese
	

	mbstring_language = Japanese
	

内部文字エンコーディングのデフォルト値を”UTF-8″にします。

	;mbstring.internal_encoding = EUC-JP
	

	mbstring.internal_encoding = UTF-8
	

HTTP入出力文字エンコードのデフォルト値を”pass”にします。

	;mbstring.http_input = auto
	;mbstring.http_output = auto
	

	mbstring.http_input = pass
	mbstring.http_output = pass
	

HTTP入力エンコーディング変換を無効にします。

	;mbstring.encoding_translation = Off
	

	mbstring.encoding_translation = Off
	

文字コード検出順序のデフォルト値を定義します。”auto”だとASCII, JIS, UTF-8, EUC-JP, SJISの順序となるので指定しておきます。

	;mbstring.detect_order = auto
	

	mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
	

無効な文字列があった場合の代替文字のデフォルト値を設定します。今回は”none”を指定します。

	;mbstring.substitute_character = none;
	

	mbstring.substitute_character = none;
	

シングルバイト対応の関数をマルチバイト対応関数でオーバーライド(置換)すると不具合が発生する可能性があるのでオフにします。
PHP: 関数のオーバーロード機能 – Manual

	;mbstring.func_overload = 0
	

	mbstring.func_overload = 0
	

文字コードの自動判別を厳密に行うかどうかの設定でメリット・デメリットがあるようですが今回は”Off”にします。

	;mbstring.strict_detection = Off
	

	mbstring.strict_detection = Off
	

以下2つに関しては今回は必要無いのでコメントのままとしておきます。

	;mbstring.http_output_conv_mimetype=
	;mbstring.script_encoding=
	

php.iniを上書きした後、Apacheを再起動して変更を反映させてください。
再度PHPの設定一覧よりmbstringの項目を見ると設定内容が反映されているのが確認できると思います。