>>838
漢字の表にらめっこしてて気づいた。UTF-8の[漾-K]とsjisの[漾-K]は違う、と
なのでPHPに直接漢字を書いたら意味を成さない

mb_convert_encodingでshift_jis範囲外の文字をshift_jisに変換すると\x0-\xffの範囲に収まる文字に化けることに気づいたので
書いてみた。これで今度こそちゃんと動くはず

<?php
$string = "ここにsjis範囲外の文字を混ぜてみるといいよ";
$length = mb_strlen($string,"UTF-8");
$return = "";
for($i = 0; $i < $length; $i++){
  $now = mb_substr($string,$i,1,"UTF-8");
  $sjis = mb_convert_encoding($now,"Shift_JIS","UTF-8");
  if(preg_match('/^[\x0-\xff]$/',$now) == 1) {
    //半角文字はスルー
    $return .= $now;
  }else if(preg_match('/^[\x0-\xff]$/',$sjis) == 1) {
    //半角文字ではないのにsjisに変換したら半角文字になったらsjis範囲外と判定
    $return .= "?".hexdec(bin2hex(mb_convert_encoding($now,"Unicode","UTF-8"))).";";
  }else{
    //それ以外は対応していると判定
    $return .= $now;
  }
}
echo $return;
?>