トラックバックモジュールの文字化け対策

Drupal をブログとして使う際に多くの方が使うであろう TrackBackモジュール は、文字コードを UTF-8 で処理するようになっています。これ自体は Drupal の仕様なので問題はないのですが、日本固有の問題として文字コードの多様性があり、一部のサイトで文字コードに EUC-JP が使われていることがあります。そしてこれがトラックバックの文字化けに繋がってしまいます。

Drupal をインストールするサーバが国内のものであれば、大抵の場合 mbstring が利用可能だと思います。その場合、以下のように変更することで文字化けを改善することができます。なお、以下のようにマルチバイト文字を入れる場合は、必ず UTF-8N で保存してください。

2006/01/10の時点で最新の

// $Id: trackback.module,v 1.53.2.2 2005/11/29 23:28:39 robinmonks Exp $

の場合は31行目(他のバージョンでは同様の行)付近を以下のようにしてください。

 if ($trackback->url && valid_url($_REQUEST['url'], TRUE)) {
   $trackback->trid = db_next_id('{trackback_received}_trid');
   $trackback->nid = $node->nid;
   $trackback->created = time();
   $trackback->site = $_SERVER['REMOTE_ADDR'];
   // ここから 
   $utf8_blog_name = mb_convert_encoding($_REQUEST['blog_name'], "UTF-8", "auto");
   $utf8_title     = mb_convert_encoding($_REQUEST['title'], "UTF-8", "auto");
   $utf8_excerpt   = mb_convert_encoding($_REQUEST['excerpt'], "UTF-8", "auto");
   $trackback->name = strip_tags($utf8_blog_name ? $utf8_blog_name : $trackback->url);
   $trackback->subject = strip_tags($utf8_title ? $utf8_title : $trackback->url);
   $trackback->excerpt = strlen($utf8_excerpt) > 255 ? truncate_utf8($utf8_excerpt, 252) .'...' : $utf8_excerpt; // バグがあったのでついでに修正
   // ここまで追加
   /* ここから 
   $trackback->name = strip_tags(($_REQUEST['blog_name']) ? $_REQUEST['blog_name'] : $trackback->url);
   $trackback->subject = strip_tags(($_REQUEST['title']) ? $_REQUEST['title'] : $trackback->url);
   // $trackback->url already set above.  Though I might say something here since I'm setting the fields
   // in the exact same order that they are created in the table's create statement (with this exception).
   $trackback->excerpt = (strlen($_REQUEST['excerpt'] > 255) ? truncate_utf8($_REQUEST['excerpt'], 252) .'...' : $_REQUEST['excerpt']);
    ここまでコメントアウト */
   $trackback->status = (variable_get('trackback_moderation', 0) == 0) ? 1 : 0;