2011-01-10 4 views
2

ich einen kleinen PHP-Skript Schrieb Zeichenfolge zu konvertieren verhexen, aber ich habe ein Problem, oder ich etwas verpaßt, ist hier ein kleiner Test:php bin2hex Problem

$char='だ'; 
$a='a'; 
echo $char,':', bin2hex($char),"\n"; 
echo $a,':', bin2hex($a),"\n"; 

Das Ergebnis i für das bekommen 'a' (oder eine ASCII) korrekt ist, aber für chinesische oder Hebräisch oder Arabisch ist korrekt nicht hier ist die Ausgabe:

だ:e381a0 
a:61 

Was diese lange Zahl ist die HEX für dieses Zeichen (だ) von charmap Werkzeug ist 3060 aber warum bekomme ich falsche Werte von PHP.

Danke.

+0

FYI, das ist japanisches Zeichen – ajreal

Antwort

2

0xE381A0 ist die UTF-8-Codierung für :

U+3060 だ e3 81 a0 HIRAGANA LETTER DA 

http://www.utf8-chartable.de/unicode-utf8-table.pl?start=12192

Also Ihr Ausgang ist richtig, wenn Sie Ihre Eingabe soll UTF-8 sein.

aktualisieren

Wenn das, was Sie wollen, können Sie 3060 mit diesen Substanzen erhalten:

iconv_set_encoding('internal_encoding', 'UTF-8'); 

echo bin2hex(iconv('UTF-8', 'ISO-10646-UCS-2', 'だ')) . PHP_EOL; 
echo bin2hex(iconv('UTF-8', 'UNICODE-1-1', 'だ')) . PHP_EOL; 
echo bin2hex(iconv('UTF-8', 'UTF-16BE', 'だ')) . PHP_EOL; 

Siehe iconv() für weitere Informationen.

+0

Ich sehe, so gibt es eine Möglichkeit, den Hex-Wert von der UTF-8-Codierung zu bekommen?. Danke – ibmkhd

+0

Ich verstehe Ihre Frage nicht. Auf welche Weise muss es mehr Hex als "e381a0" sein? –

+0

ich meine, wie man die '3060' bekommt. – ibmkhd

0
  • e3 = 227
  • 81 = 129
  • a0 = 160

Das ist wahrscheinlich ein 3-Byte-Unicode-Zeichen, also die drei Hexadezimalwerte von bin2hex() zurückgegeben. Sehen Sie diese phpsh ausgegeben, wenn Sie immer noch verwirrt sind:

php> =bin2hex('adam') 
"6164616d" 
+0

Aber wie bekomme ich den richtigen Hex-Wert, das Charmap-Tool zurückgegeben 3060 für diese char, ich brauche einen Weg, um den gleichen Wert von PHP zu bekommen. Und ich verstehe das auch mit Arabisch. – ibmkhd

+0

Ich glaube nicht, dass es einen "richtigen Hex-Wert" gibt. Sie könnten diese drei Hex-Zahlen addieren, aber e381a0 ist ein anderes Zeichen als a081e3 und beide haben die gleiche Summe. Es sei denn du sagst "0xE3 + 0x81 * 16 + 0xA0 * 16 * 16". Willst du PHP dazu bringen, dir den gleichen Wert wie Charmap zu geben? –

+0

@ibmkhd, versuchen Sie, von UTF-8 in einen anderen Zeichensatz zu konvertieren? –