1

データのリストがある場合:

$a = "hello";

$b= "4f60";

$c = "hi";

$d = "00480065006C006C006F";

$b と $d は UCS-2 文字列です。これらすべてのデータを表に表示したいのですが、どのデータが UCS-2 であるかを知り、表示する前に変換できるようにするにはどうすればよいですか? 出来ますか ?php.net で見つかったユニコードに対して mb_detect_encoding と preg_match を試しましたが、それでもユニコードと見なされる未知のシンボルです。

ありがとうございました。

4

1 に答える 1

4

まず、表示する文字列は16進表現であり、実際のUCS-2またはUTF-8エンコーディングではありません。

とは言うものの、 UCS-2UTF-8の間にはかなり大きな違いがあり、非常に高い成功率でエンコーディングを正しく検出するコードを記述できます。ただし、その前に、どのように使用していて、機能していないかを示してくださいmb_detect_encoding。すでに存在するよりも悪いホイールを再発明する意味はありません。

更新:入力文字列は実際にはエンコードされたバイト値ではありません。それらは値の16進表現です。これを元に戻すには、

$proper_string = pack('H*', $hex_encoded_string);

この後、正常にmb_detect_encoding動作するはずです。

于 2012-01-19T18:14:03.780 に答える