自家製の UTF-8 / UTF-16 デコード関数 (&#number; 表現に変換) を使用して終了しましたが、UTF-8 が検出されない理由のパターンは見つかりませんでした。 「encoded-as」シーケンスは、返される文字列内で常に正確に同じ位置にあるとは限りません。それについて追加のチェックを行う場合があります。
3 文字の UTF-8 インジケータ: $startutf8 = chr(0xEF).chr(187).chr(191); (最初の 3 文字だけでなく、どこにでも表示される場合、文字列は UTF-8 でエンコードされています)
UTF-8 規則に従ってデコードします。これは、バイトごとに処理する以前のバージョンを置き換えます:using
function charset_decode_utf_8 ($string) {
/* Only do the slow convert if there are 8-bit characters */
/* avoid using 0xA0 (\240) in ereg ranges. RH73 does not like that */
if (! ereg("[\200-\237]", $string) and ! ereg("[\241-\377]", $string))
return $string;
// decode three byte unicode characters
$string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e",
"'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'",
$string);
// decode two byte unicode characters
$string = preg_replace("/([\300-\337])([\200-\277])/e",
"'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'",
$string);
return $string;
}