#contents
**mbstring [#sa550d6d]
~[[PHP]] 用[[マルチバイト文字対応モジュール>http://jp2.php.net/manual/ja/book.mbstring.php]]。PHP4 は、4.0.6 から日本語用マルチバイト関連モジュールが標準で付属するようになりましたので、4.0.6以降のバージョンであれば標準で組み込まれているはずです。~
4.3からは他の言語のサポートも追加されています。
~[[phpinfo()]]を実行して下記のような表記があれば組み込まれています(PHP 4.3以降はもっと詳細な表示になってます)。
#ref(mb_jstring.png,wrap,nolink)
~&color(crimson){''組み込まれていない場合や必要な機能が無効になっている場合は、PHPをリビルドして再導入する必要があります''。};

#br
~winにインストールするのに[[WindowsでPHP4:http://tsuttayo.sytes.net/php/install/win.html]]が参考になりました。mbstringが組み込まれていないエラーで苦労しました

-補足
--PHP 4.3.x の場合、経験則的に以下の設定がよさそうです。
 ; コメントを外す
 extension=php_mbstring.dll
 
 ; 「On」を「Off」へ変更
 magic_quotes_gpc = Off
 
 ; 「Off」を「On」へ変更
 output_buffering = On
 
 ; 変更
 output_handler = mb_output_handler
 
 ; 変更
 default_charset = "EUC-JP"
 
 ; 変更
 extension_dir = C:/php/extensions
 
 ; 変更
 ; ここは初期値でコメントになっているので注意。
 mbstring.language = Japanese
 mbstring.internal_encoding = EUC-JP
 mbstring.http_input = auto
 mbstring.http_output = EUC-JP
 mbstring.encoding_translation = On
 mbstring.detect_order = auto
 mbstring.substitute_character = none
 ; none の最後のセミコロンも不要
-[[reimy]] &new{2004-02-24 (TUE) 21:40:09};
 mbstring.http_input = pass
 mbstring.encoding_translation = Off
~[[.htaccess]]をこのようにしないと文字化けする可能性があります(どちらか一方でよい)。[[続・質問箱/51]]参照。

--------------------------------
** (lib/)mbstring.php [#g3767169]
- See: [[PukiWiki/mbstring無しのPHPでの動作]]

** php.ini [#p5b9da7b]
-上記と異なる設定についてです。文字化け対策としては無難です。
-参考文献:[[PHPの文字化けを本気で解決する>http://hain.jp/index.php/tech-j/2007/02/13/p125]]
 ;; Disable Output Buffering
 output_buffering = Off
 
 ;; Set HTTP header charset
 ; default_charset = EUC-JP
 
 ;; Set default language to Japanese
 mbstring.language = Japanese
 
 ;; HTTP input encoding translation is enabled.
 mbstring.encoding_translation = off
 
 ;; Set HTTP input encoding conversion to auto
 mbstring.http_input = pass
 
 ;; Convert HTTP output to EUC-JP
 mbstring.http_output = pass
 
 ;; Set internal encoding to EUC-JP
 mbstring.internal_encoding = EUC-JP
 
 ;; Do not print invalid characters
 mbstring.substitute_character = none
 
 mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII
~
 extension=php_mbstring.dll
これも忘れずに。~

**mbstringがうまく設定出来ていない場合の現象 [#x846092a]
***InterWikiのエンコード変換が出来ない。 [#n32664f5]
例えば~
EUC版から[[official:http://pukiwiki.sourceforge.jp/]]等のUTF-8サイトの日本語ページにリンクできない。~
UTF-8版から[[dev:http://pukiwiki.sourceforge.jp/dev/]]等のEUCサイトの日本語ページにリンクできない。~
-[[mbstring]]自体が有効になってないと思われます。
-[[phpinfo()]]を確認ください。

***ページの表示は出来るが、編集しようとすると文字化けして編集出来ない。 [#x9633a59]
-'''mbstring.http_input'''がautoになっていると思われます。
-[[phpinfo()]]を確認ください。

***特定のページだけ変換が失敗する。 [#w28d65ab]
-[[InterWikiName]]の定義書式にて、ブランケットとエンコード文字列の区切り文字が2文字以上で定義されている。
--make_link.phpの800行目近傍の処理で、正規表現のマッチングがあるが、「\s?(空白文字0~1個)」をマッチしているので、2文字で区切られているとエンコード文字列が定義されず、デフォルト扱いとなる。
//InterWikiの定義書式(古いバージョンでは[[InterWikiテクニカル]]に説明が分散)は元から
// [URL サーバ名] タイプ
//と区切り1個限定です。
//それ以前に、正規表現にマッチしない現象自体はmbstringとは無関係。
//***特定のページだけ変換が失敗する。 [#w28d65ab]
//-[[InterWikiName]]の定義書式にて、ブランケットとエンコード文字列の区切り文字が2文字以上で定義されている。
//--make_link.phpの800行目近傍の処理で、正規表現のマッチングがあるが、「\s?(空白文字0~1個)」をマッチしているので、2文字で区切られているとエンコード文字列が定義されず、デフォルト扱いとなる。
//
//編集時の見た目の問題でタブを使ったところ、半角スペース+タブとなっており、見えずにNG。
//
//-対策1
//--[[InterWikiName]]書式を空白文字1文字で区切る。
//-対策2
//--make_link.phpの804行目の書き換え。
//---その他の弊害は今のところ不明。
//
// 編集前
// '[!~*\'();\/?:\@&=+\$,%#\w.-]*)\s([^\]]+)\]\s?([^\s]*)/',
//
// 編集後
// '[!~*\'();\/?:\@&=+\$,%#\w.-]*)\s+([^\]]+)\]\s*([^\s]*)/',

編集時の見た目の問題でタブを使ったところ、半角スペース+タブとなっており、見えずにNG。

-対策1
--[[InterWikiName]]書式を空白文字1文字で区切る。
-対策2
--make_link.phpの804行目の書き換え。
---その他の弊害は今のところ不明。

 編集前
 '[!~*\'();\/?:\@&=+\$,%#\w.-]*)\s([^\]]+)\]\s?([^\s]*)/',

 編集後
 '[!~*\'();\/?:\@&=+\$,%#\w.-]*)\s+([^\]]+)\]\s*([^\s]*)/',


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.3+ © 2001-2020 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.081 sec.

OSDN