header image

Ryuzeeの他サイト

mixi Twitter Twitter

Categories

携帯対応

QRコード

RING

人気ブログランキング



新着記事

2007/12/07 13:50:07 phpMyFaq none Comments
add Hatena Bookmark Tags:

以前に僕が報告したのだが、2.0.3以前のバージョンではinc/Init.phpの中で、
html_entity_decodeを文字コードの指定なしに指定していたため、先頭が空白文字のみで終わる行について文字化けしてしまう不具合があった。

で、2.0.3では以下のように修正されている。(inc/Init.phpの500行目付近)

$string = html_entity_decode($string, ENT_COMPAT, $PMF_LANG['metaCharset']);

実はこれでは対策が不十分ぽい。
というのも、呼び出し履歴を見る限り、$PMF_LANG['metaCharset']が画面のアクセスのタイミングでは正しく言語ファイルの中の$PMF_LANG['metaCharset']を利用するように初期化されずに、場合によってはiso-8859-1に置き換わってしまうケースがあるためだ。
(簡単にいうと初期化タイミングがおかしそう)

とりあえず暫定で対応するのであれば、以前のエントリにあるように

$string = html_entity_decode($string, ENT_COMPAT, 'utf-8');

にしておく必要がある。

本家サイト。11/18付け。

2007-11-18
The phpMyFAQ team is pleased to announce phpMyFAQ 2.0.4, the "I Am Trying To Believe" release. This release added a Thai translation, some DiggIt! and French translation fixes and many minor bugfixes.

ということで、2.0.4がリリースされた。主な変更点は

  • タイ語の翻訳ファイルが追加された
  • フランス語の翻訳内容の見直し
  • 多くのマイナーバグの修正

本家サイトより。
8/18にphpMyfaq2.0.3がリリースされた。このバージョンでは多数の細かい不具合(用語集、タグ、Ajax検索など)が修正されている。
修正されたファイルは下記のファイルだ。

  • ./inc/Glossary.php
  • ./inc/Init.php
  • ./inc/Tags.php
  • ./install/installer.php
  • ./install/update.php
  • ./ajaxresponse.php

#オイラのcontributeも無事取り込まれてた(^^)

おいらがレポートした2件について、phpMyFaq2.0.3と2.5.0-devのCVSに取り込まれた。
ということで、以前にこのブログで報告している

  • インスタントレスポンスが文字化けする件
  •  が文字化けする件

は修正された。これでとりあえず日本人は困らないはず。

報告内容
https://thinkforge.org/tracker/index.php?func=detail&aid=1488&group_id=22&atid=169
https://thinkforge.org/tracker/index.php?func=detail&aid=1489&group_id=22&atid=169

まず、FPDFのサイトから日本語対応バージョンをダウンロードする
http://www.fpdf.org/phorum/read.php?f=1&i=7977&t=7977
にアクセスし、japanese.zipを取得

取得後解凍し、fpdf.phpが置いてある場所に解凍後のファイルを配置する

以降、phpMyFaqのソースファイルを修正する。
修正対象はphpmyfaq直下のpdf.phpおよびinc\PMF_ExportにあるPdf.phpの2ファイル。

inc\PMF_Export\Pdf.php
28行目

require_once(dirname(dirname(__FILE__)).'/libs/fpdf.php');

を以下に変更

require_once(dirname(dirname(__FILE__)).'/libs/japanese.php');

またフォント指定が全てArialなので、

$this->SetFont("Arial", ・・・

となっている箇所を全て

$this->SetFont("SJIS", ・・・

に変更する。

またFooter()関数内で、$PMF_LANG["ad_gen_page"]という変数を直接PDFに出力しているが
そのままでは文字化けするので、この文字列をSJIS変換する。

$this->Cell(0, 10, $PMF_LANG["ad_gen_page"] ." ".$this->PageNo()."/{nb}",0,0,"C");

を以下に変更

$s = $PMF_LANG["ad_gen_page"];
$s = mb_convert_encoding($s, "SJIS", "auto");
$this->Cell(0, 10, $s ." ".$this->PageNo()."/{nb}",0,0,"C");

次に直下のpdf.phpを修正する。
考え方は一緒で、全ての文字列をSJISに変換することと、フォント指定のArialをSJISに変更する。
こちらは対象箇所が多いので割愛。

今回の修正ファイルはここから入手可能です。
ライセンスはオリジナルに準じます。(MPL)
全部はテストしきれていないのでご利用は計画的に自己責任で。

とりあえず、さらに色々見つかったので、バグトラッキングシステムに入力してみた。
うまくいけば今後のバージョンで取り込まれるかも。
#久しぶりに英語書いたので、あまりの書けなさに愕然とした(--;

savequestions.phpの76行目付近

$additional_header = array();
$additional_header[] = 'MIME-Version: 1.0';
$additional_header[] = 'Content-Type: text/plain; charset='.$PMF_LANG['metaCharset'];
if (strtolower($PMF_LANG['metaCharset']) == 'utf-8') {
    $additional_header[] = 'Content-Transfer-Encoding: 8bit';
}
$additional_header[] = 'From: "'.$questionData['ask_username'].'"
<'
.$questionData['ask_usermail'].'>';
// Let the category owner get a copy of the message
if ($IDN->encode($faqconfig->get('main.administrationMail')) !=
$oUser->getUserData('email')) {
    $additional_header[] = "Cc: ".$oUser->getUserData('email')."\n";
}
$body = $questionMail;
$body = str_replace(array("\r\n", "\r", "\n"), "\n", $body);
if (strstr(PHP_OS, 'WIN') !== NULL) {
    // if windows, cr must "\r\n". if other must "\n".
    $body = str_replace("\n", "\r\n", $body);
}
if (ini_get('safe_mode')) {
    mail($IDN->encode($faqconfig->get('main.administrationMail')),
        $PMF_CONF['main.titleFAQ'],
        $body,
        implode("\r\n", $additional_header));
} else {
    mail($IDN->encode($faqconfig->get('main.administrationMail')),
        $PMF_CONF['main.titleFAQ'],
        $body,
        implode("\r\n", $additional_header),
        '-f'.$questionData['ask_usermail']);
}

if (function_exists('mb_encode_mimeheader')) {
    $name = mb_encode_mimeheader($questionData['ask_username']);
    $subject = mb_encode_mimeheader($PMF_CONF['main.titleFAQ']);
} else {
    $name = encode_iso88591($questionData['ask_username']);
    $subject = encode_iso88591($PMF_CONF['main.titleFAQ']);
}

$additional_header = array();
$additional_header[] = 'MIME-Version: 1.0';
$additional_header[] = 'Content-Type: text/plain; charset='.$PMF_LANG['metaCharset'];
if (strtolower($PMF_LANG['metaCharset']) == 'utf-8') {
   $additional_header[] = 'Content-Transfer-Encoding: 8bit';
}
$additional_header[] = 'From: "'.$name.'" <'.$questionData['ask_usermail'].'>';
// Let the category owner get a copy of the message
if ($IDN->encode($faqconfig->get('main.administrationMail')) !=
$oUser->getUserData('email')) {
    $additional_header[] = "Cc: ".$oUser->getUserData('email')."\n";
}
$body = $questionMail;
$body = str_replace(array("\r\n", "\r", "\n"), "\n", $body);
if (strstr(PHP_OS, 'WIN') !== NULL) {
    // if windows, cr must "\r\n". if other must "\n".
    $body = str_replace("\n", "\r\n", $body);
}
if (ini_get('safe_mode')) {
    mail($IDN->encode($faqconfig->get('main.administrationMail')),
        $subject,
        $body,
        implode("\r\n", $additional_header));
} else {
    mail($IDN->encode($faqconfig->get('main.administrationMail')),
        $subject,
        $body,
        implode("\r\n", $additional_header),
        '-f'.$questionData['ask_usermail']);
}

に変更する。同件があるような気がする。
要はメール送信時のヘッダがちゃんとエンコードされていないっつうこと。

ajaxresponse.phpの52行目を以下の通り修正する。

if ($PMF_LANG['metaCharset'] != 'utf-8') {

if (strtolower($PMF_LANG['metaCharset']) != 'utf-8') {

に修正する。これで文字化けしなくなる。
微妙にしょぼい。

#7/16追記
BTSに報告したところ、2.0.3で修正した、との回答をもらいましたので、上記は2.0.2まで有効。
それ以降のバージョンで発生した場合は別の問題。

inc/Init.phpの497行目付近の

$string = html_entity_decode($string, ENT_COMPAT);

$string = html_entity_decode($string, ENT_COMPAT, "UTF-8");

に変更する。

理由はhtml_entity_decode関数のデフォルト文字コードがISO-8859-1であるため。

分かると成程だが、結構嵌った。。。

#7/16追記
BTSに報告したところ、2.0.3で修正した、との回答をもらいましたので、上記は2.0.2まで有効。
それ以降のバージョンで発生した場合は別の問題。

オープンソースのFAQ管理ソフトウェアであるphpMyFaqの最新版2.0.2が7/8にリリースされた。

主な変更点は以下の通り。

  • いくつかのパフォーマンスの改善
  • いくつかの権限関連の修正
  • ドイツ語言語ファイルの更新
  • マイナーバグフィックス

ということで、ソースを見てみたが、この間、オイラが掲載した、用語集の箇所で二重エスケープされる問題と、TinyMCEを利用して空白を挿入した場合に文字化けしてしまう件は直っていない・・・。

« 前の記事 


ads

Ryuzeeのお気に入り

add to hatena hatena.comment (0) add to del.icio.us (0) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 0