抜粋(ティーザー)の自動作成処理の修正

Drupalではコンテンツを投稿した際に、本文から一部を抜粋して本文とは別に保存します。この部分は「ティーザー」と呼ばれ、コンテンツをフロントページに掲載した際や、RSSフィードの一部、また各種のブロックなどで利用されます。

この部分は意図的に区切りを指定しない限り、自動的に先頭から適当な文字数(デフォルトでは200文字程度)付近の句読点や改行などを探して区切られ、日本語の区切り文字としては句点が利用されています。
ところがこの処理にはバグがあり、句点である"。"はUTF-8では3byteなのに対して、これを1byteとして扱ってしまっています。このため、日本語の句点で区切られて抜粋(ティーザー)が作成された場合、表示が崩れたり、ブラウザによってはRSSフィードが取得できなかったり、当然データベース中のデータも破損した状態になり様々な問題を起こします。

4.6.x では、以下のようにコードを修正して問題を回避してください。(2006/04/20 バグ報告、 同/22 CVS版にて修正されたので、4.7.x 以降ではこの問題は発生いたしません。)

修正するモジュール: modules/node.module
Ver. 4.6.5 の場合は194行目(他のバージョンでは同様の行)
$breakpoints = array('

' => 4, '
' => 0, '
' => 0, "\n" => 0, '. ' => 1, '! ' => 1, '? ' => 1, '。' => 1, '?? ' => 1);

をコメントアウトして、以下のように修正します。

//  $breakpoints = array('</p>' => 4, '<br />' => 0, '<br>' => 0, "\n" => 0, '. ' => 1, '! ' => 1, '? ' => 1, '。' => 1, '?? ' => 1);
  $breakpoints = array(
    '</p>' => 4, '<br />' => 0, '<br>' => 0, "\n" => 0, '. ' => 1, '! ' => 1, '? ' => 1,
    "\xE3\x80\x81" => 3, // 、 IDEOGRAPHIC COMMA
    "\xE3\x80\x82" => 3, // 。 IDEOGRAPHIC FULL STOP
//    "\xEF\xBC\x81" => 3, // ! FULLWIDTH EXCLAMATION MARK
//    "\xEF\xBC\x8C" => 3, // , FULLWIDTH COMMA
//    "\xEF\xBC\x8E" => 3, // . FULLWIDTH FULL STOP
//    "\xEF\xBC\x9F" => 3  // ? FULLWIDTH QUESTION MARK
    );

上記の修正で、句点または読点が区切りになるようになります。もし、"!"や"?"なども区切りの対象としたい場合は、行の先頭にある"//"を削除してください。その際に最後の行にあたる

=> 3,

の部分のコンマを削除して

=> 3

としてください。
なお、以下の部分はアラビア文字なので省略して削除してあります。
'?? ' => 1