フロントページに最新のニュースを表示する場合,一つ一つのニュースは例えば600文字($CFG->forum_longpost)の長さを越える分は表示を省略します.(厳密には,600byteを越えた後に現れた半角ピリオドまで表示)
これはmod/forum/lib.php中のfunction forum_shorten_post()で実現しています.
一度,目を通して頂ければ分かりますが,かなり弱いコードです.例えばニュース本文中に' a < b'のような記述があったとします.もしその後に,'>'が現れない場合,全文が表示されます(<から>までをタグと考えているため).
また,停止条件を'.'(半角ピリオド)としているため,非常に長い日本語で書かれたニュース投稿の場合,本文中に半角ピリオドがなければ,これも最後まで省略されずに表示されます.それどころか,もし文中に'0.5[s]'のように半角のピリオドを使ってしまうと,ここで切れます.
不幸中の幸いは,半角ピリオドを停止条件としているため,
return substr($message, 0, $truncate);
このような分断の仕方をしていてもUTF-8のマルチバイト文字が途中で分断されるバグには成らないことでしょうか.
ラテン語圏での使用でも問題があるし,日本語圏ではほとんど役に立っていない.どうしたものか.
#文字列を配列として扱っているのですが,それをmb_substr()による扱いに変えればなんとかなりそうですね.