オープンソースの広告配信システム、phpAdsNew 改め OpenAds 改め OpenX での文字化け対応メモ。てか名前変わりすぎ。たぶん OpenX ってのもすぐ変わると予想。
まず、本体ですが本家サイトの配布ファイルは日本語の言語ファイルが入ってませんのでopenx.jpから日本語言語ファイル入りのアーカイブをダウンロードします。こちらも全てが日本語になってるわけではないです。すでにインストール済みの場合は言語ファイルのみ導入でOK。言語ファイルの位置は“lib/max/language/”。というわけで文字コードはUTF-8を使うということで話を進めます。
日本語、というかマルチバイト文字を使うために絶対必要な対処が banner-edit.php の修正。パスは www/admin/ 。884行目と1000行目(付近)の htmlentities に引数(?)を指定します。
echo "' tabindex='".($tabindex++)."'>".htmlentities($row['htmltemplate'], ENT_QUOTES, 'UTF-8')."</textarea></td></tr>";
htmlentities を htmlspecialchars へ置き換えるのでも良さそうですが、一応オリジナルを残す方にしてみました。次の次とかのバージョンぐらいには変わってそうです。
これはバナーのコードを一度設定した後に編集画面を開くときに影響するので、最初の登録ではデータは化けません。逆に言えば、最初の登録以降に何かを編集している場合は、DBに格納されているデータ自体が化けてしまっていますので、再度正しいコードを登録してください。
環境によってはこれだけで文字化けはなくなるはずですが、やっぱり出力される文字が化けるという場合は、出力部分にも手を加えます。
出力に JavaScript を利用している場合は www/delivery にある ajs.php の2679行目付近で
header("Content-type: application/x-javascript; charset=utf-8");
とヘッダで文字コードを指定します。iframe を利用している場合は afr.php の2655行目付近へ
$outputHtml .= "<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />\n";
の1行を追加します。場所は head タグ内ならどこでも。
後半の修正は、送られてくるコードをブラウザが正しく判別できないことが原因なので、文字が化けている場合はブラウザの表示メニューから文字コードを確認してみるといいと思います。
以上の2点で私の環境では文字化けはなくなりました。どちらもわかってしまえば当たり前のことなんですが、すぐ忘れてしまうのでメモ。
あと、かなりどうでもいい話ですが、タブの端にある画像がリンク切れになって気になる、という時は「ユーザインタフェースの設定」からヘッダーの背景色を「ffffff」(小文字)に設定するとリンク切れがなくなりました。
“OpenX の 文字化け” への1件のコメント
IEだとまだ化けてた
自分で使ってる範囲では文字化けはなくなってると思ってた OpenX ですが、Xoops 内で表示させたとき IE から見るとエラー出してました。
エラーの表示は「;が無いよ!」って内容だったん…