PukiWiki/単語検索の文字化け対応

PukiWiki UTF-8版での文字化け対応 (2014-08-30、更新:2016-11-26)

単語検索が必ず文字化けする!
PukiWiki に限らず、日本語&PHPの場合での注意事項ですね。

前提条件

こんな条件でインストールしています

  • Apacheはソースからビルド
  • PHPもソースからビルド
  • PukiWikiはUTF-8版

ApacheとPHPの連携は、PHPのインストール を参照。

まず phpinfo()を見る

見ておきたいのは。

  • Configuration File (php.ini) Path の場所*1
  • mbstring周りの設定有無(内容は後述)

コマンドラインから見る

php -i

パイプ渡しで「php -i | less」とするか、grep で絞るかはお好みで。

ブラウザから見る

適当なファイルでPHPの設定を確認します。
注意として、自分だけがわかるファイル名で作って、使い終わったら忘れずに削除する方が良いです。
他人にPHPの設定内容をさらすのはセキュリティホールになりかねないので。

たとえば cgi-bin/phpcheck.php をつくる。内容は以下。

<?php phpinfo() ?> 

このファイルにブラウザからアクセスして確認します。

PHPのリビルド

後述のmbstring周りがちゃんと設定されていないと文字化けしてしまうようですが、
phpinfoの結果、そもそもmbstringモジュールが入っていませんでした。
有効にして再ビルドします。

configureで最低限必要なオプションはこんな感じで

./configure
--with-apxs2=/[Apacheが置いてあるPATH]/bin/apxs
--enable-mbstring

なお、前回のconfigureのオプションを忘れた場合は、config.niceファイルで確認できます。
なおmbstringにはlibmbflライブラリが必要なのですが、最新のPHPソースを持ってきたからか、最初から入っていました。
無事構築できたら make; make test; make install していきましょう。

mbstringの設定

phpinfoでmbstringが入ったのを確認したら、早速設定しましょう。
php.ini に以下のように設定しました。

mbstring.language = Japanese
mbstring.detect_order = UTF-8,ASCII,EUC-JP
mbstring.substitute_character = none;

私のケースの場合はオプションの内容云々ではなく、mbstringモジュールが入っていなかったのが文字化けの原因だったようです。
いずれにせよ無事解決しました。ホっ。


*1 てっきり/etc/php.ini を読んでいる思いこんでいたので余計な時間がかかりました。。