といっても本当に直っているかは怪しい所。何せ今まで手動で修正していた方法をスクリプトに導入しただけなので、根本的な改善には至っていない、ただの応急処置です。
そもそも何で化けるのかと言うと、ある特定の文字の後ろに改行(キャリッジ+改行\r\n)が入ると、日本語変換処理ルーチンが改行文字までも日本語文字と勘違いし、\nを文字として表示してしまうのだ。なので改行されずに\nの後に次の行が続いて表示されてしまう。本当はその日本語変換処理を改善したい所なのだが、最近Perlに統合されてしまったのでそれの中身はいじれない。
と言うことで、コメントを取得している処理のスクリプトを眺めていたらキャリッジ(\r)を削除している部分があったので、削除するのでは無く半角スペースに変換するよう改造した。今までは改行文字化けが発生した場合は手動で改行の前に半角スペースを入れて応急処置していたので、「じゃぁ全ての改行の前に自動で半角スペースを入れれば?」という発想(チープ)。
そもそもなんでうちのだけこんな症状が出るんだろうか・・・。MovableType関係のホームページで同じ症状の人が居ないか探しまくったのだが同じものは1件も検索されなかった。
てことで改造方法だが、mt/lib/mt/comments.pmの484行目
(my $text = $q->param(‘text’)||”) =~ tr/\r//d;
を、↓
(my $text = $q->param(‘text’)||”) =~ tr/\r/ /d;
に変更するだけ。リファレンスを見ると、文字を置き換える場合はケツにdが入らないらしいのだが、上記のままで思ったような動きをしてくれたのでこのまま公開。思いっきり間違っているのかもしれないが、実はPerlを知らない人なので勘弁。