うちの環境はこんな感じです。
- OS: NetBSD 3.0
- apache: 2.2.2
- PHP: 5.1.4
- serendipity: 1.1-alpha5
まずは、トラックバック受信処理のほうを調べます。 トラックバックの受信の様子を調べるには、comment.phpで、$tb_loggingをtrueにすればいいようです。
//$tb_logging = false;
$tb_logging = true;
この状態でトラックバックを受信すると、trackback2.logというファイルが作成されます。正常な場合と文字化けする場合とで差分をみてみると、
[26.05.2006 01:23] Transcoding comment from ISO to UTF-8
があることがわかりました。include/functions_trackbacks.inc.php を調べたところ、UTF-8エンコーディングされているものがさらにUTF-8エンコーディングされていました。どういう場合にこうなるかというと、is_utf8()関数がutf8と認識できなかった場合です。
そこで、こんどはトラックバック送信側を調べました。ファイルは同じく、include/functions_trackbacks.inc.php です。送信側のコードを調べてみたら、トラックバックの送信時にexcerpt(抜粋)が、substr()関数で255バイトにちょん切られている箇所がありました。ここではUTF-8のことは考慮されていないため、おかしな切れ目で切れてしまうことがあります。そうするとトラックバック受信側ではそれをUTF-8とは認識できなくなるようです。
他の箇所を参考に以下のようなパッチをつくりました。
--- functions_trackbacks.inc.php.orig 2006-04-21 21:44:55.000000000 +0900
+++ functions_trackbacks.inc.php 2006-05-26 02:51:20.000000000 +0900
@@ -334,7 +334,7 @@
* @return string Output text
*/
function serendipity_trackback_excerpt($text) {
- return substr(strip_tags($text), 0, 255);
+ return serendipity_mb('substr', strip_tags($text), 0, 255);
}
/**
これで、いまのところ問題なくなりました。
yellowback's blog 日時 : serendipityで日本語(UTF-8)トラックバックできない その後