その後ありみかさんもTrackBackを実装されたとのこと。しかしコミューン(?)はやはりalib.jpの元に集結するのか、などとひとりで勝手に感慨に耽ってみたり。というのも以前いわいさんがTrackBackをalib.jpで動かしていたのを見かけていたもので。こちらでのTrackBack実装にあたっては、いわいさんのTrackBackの使い方も参考にしていました。
で、その実装されたすぐ後に、ねこめしにっき宛てに概要文の大きなTrackBackが送られていた(今は訂正されてます)のを拝見し、また検索で色々なMovable TypeのTrackBackを拝見しても、ときおり結構な量の概要文があるのをちらほらと見かけまして、自分のところもちゃんとTrackBackの量の制限をせねばと思ったのでした。送る方である程度制限されるのかなと期待していたのですが、そうでもないようで、やはり外から来るデータを信用してはならない、というのはサニタイズの場合にも同様に言える原則であります。
さてどうやって文字数を制限するかというのが考えどころで。ねこめしにっきのTrackBack を実装してみたなり (2) でも触れられているように、一定バイト数で切ってしまうとマルチバイト文字の断片が末尾に残ってしまう可能性があるのが非英語圏在住者のつらいところ。しかしながらPerl 5.8だと、use utf8
とすればPerlの関数が文字をきちんとUTF-8文字列として扱ってくれるようなので、UTF-8に変換し、長過ぎた場合にはsubstr
で一定数の文字を抜き出す、という楽な方法に乗っかることにしました。
そんなわけで現在のスクリプトは、exerptは80字、title, blog_nameは20字(→40字に変更)、urlは1000字で切るようにしております。
時々 CGI が無反応になる事が。日本語文字列の切り落としをキレイにヤるために Jcode.pm の
jfold()
を使うようにしてるとそうなる時があるみたい。そゆ時は Jcode.pm 内でスクリプトエラー発生てなログがたくさん残るんだけど、なぜか Internal Server Error にはならない。謎。
jfold()で山ほど出てくるエラーは、スクリプト先頭行にある"
の"-w"を取っ払えば出なくなるかも……と、一応手前の環境でも確認。サーバエラーにならないのは警告レベルでのメッセージだからだと思います。#!/usr/bin/perl -w
"
バイト数で切った時に出るマルチバイト文字の断片も、正規表現を使えばうまく削れそうな気がしますが、さて。
追記: いわいさんが以前使われていたTrackBackについて"tb-standalone"と書いていたのを訂正しました。tb-standaloneではなく「Net:TrackBack を使って書いた
」ものとのことです。
追記: NiAOUさんによるUTF-8文字列カット時の処理方法
(2003年10月21日)
北村曉 kits@akatsukinishisu.net