Jcodeの半欠けマルチバイト文字の扱い

星野君より

マルチバイトの落とし穴 − @IT
半端なマルチバイト文字への対策方法
赤坂さん 「PHPの場合ならmb_convert_encoding関数を使うと半端なマルチバイト文字は消えるみたいだよ。ほかの言語でもマルチバイトをちゃんと扱える関数を使ったらいけると思うよ」

Perl の Jcode では、エンコーディング自動判別のときは '?' に、エンコーディングを指定すると消えるみたいです。

use Jcode;
my $text1 = "\x82";
my $text2 = "\x20onsubmit=alert('xss')\x20\x82";
my $t1 = Jcode->new($text1)->sjis; # エンコーディング自動判別
my $t2 = Jcode->new($text2)->sjis;
print qq{"$t1", "$t2"\n}; # > "?", " onsubmit=alert('xss') ?"
$t1 = Jcode->new($text1, 'sjis')->sjis; # sjis エンコーディング指定
$t2 = Jcode->new($text2, 'sjis')->sjis;
print qq{"$t1", "$t2"\n}; # > "", " onsubmit=alert('xss') "