アプリ版:「スタンプのみでお礼する」機能のリリースについて

phpのhex2binについて
phpで、utf-16の文字をbin2hexに通し、
hex2binに再度かけると、その16進数をutf-8と捉えられ、漢字等が上手く戻りません。
対策等無いですか?
文章では分かりにくいかと思いますので、コードの一例を載せておきます。
<?
$deta = "漢字";
$a = bin2hex(mb_convert_encoding($deta,"UTF-16LE"));
//$aは226f575b
echo hex2bin($a);//ここで「漢字」とechoされて欲しい
?>
実際表示されるのは "oW[ で、これはutf-8では226f575bとなります。

A 回答 (1件)

違います。


正しく元の UTF-16LE に変換されています。
より正確に言えば、 bin2hex で16進文字列に変換されたバイト列が、hex2binで元のバイト列に戻されています。

0x22 0x6f 0x57 0x5b となったバイト列を「UTF-16LEの『漢字』」と解釈するのか、 「ASCII互換コードの 『"oW[ 』」と解釈するのかは、それを表示するアプリケーションです。

例えば、ブラウザに "oW[ と表示されるのなら、それは、ブラウザがUTF-16LEと解釈していないからです。

よって、対策は
・アプリケーション側の設定を変えて、UTF-16LEと解釈するようにする
・UTF-16LEからアプリケーション側で対応している文字コードに変換して出力する
のいずれかになります。
    • good
    • 1
この回答へのお礼

丁寧な回答ありがとうございます
なるほど、そういう事なんですか。
という事は、
echo mb_convert_encoding(hex2bin($a),"UTF-8","UTF-16LE");
とすれば良かった、という事ですよね。
全然気づかなかったです。

お礼日時:2016/01/20 23:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!