恵です。
機種依存文字というぐらいですから、
機種によってコーディングされている場所が
違います。
> if(preg_match("/([\x87][\x40-\x9F])/", $str)){
> print "×";
> }
> else{
> print "○";
> }
ですので、「個別に機種依存文字をはじく」のではなく、
「機種依存文字でない文字をOKとする(機種依存でない文字の
エリア以外の文字を全てNGとする)」という
アプローチが有効だと思います。
P.S.しらふさんもおっしゃってますが、
機種依存文字は、それこそ見る環境によって
化けちゃいますから、MLには送らないほうが良いですよ。