2012-07-31 96 views
4

應用程式要求我插入字符串作爲text encoded using hex values in proper coding.,編碼是Unicode_No_CompressionPHP Unicode轉換爲十六進制

例如,對於Sześć siedem正確的十六進制字符串是0053007A0065015B0107002000730069006500640065006D
​​= 01790064017A00620142006F
String with no special chars = 0053007400720069006E0067002000770069007400680020006E006F0020007300700065006300690061006C002000630068006100720073

我試着玩MySQL HEX()/UNHEX()dechex() PHP,但一直無法弄清楚無法進行此轉換。有任何想法嗎?

回答

8

你基本上看UCS-2編碼的十六進制版本,我猜。因此:

php > echo strtoupper(bin2hex(iconv('UTF-8', 'UCS-2', 'Źdźbło'))); 
01790064017A00620142006F 
+0

我收到了稍微不同的結果http://pastebin.com/cw5VuTgM,有什麼想法爲什麼? – Robus 2012-07-31 14:56:17

+5

Little-endian與big-endian問題,與機器有關。試試'UCS-2BE'明確使用big-endian。 – deceze 2012-07-31 15:31:29

+0

@deceze你的答案幫助我謝謝 – shox 2013-10-02 13:51:47

0

試試這個:

$out = implode("",array_map(function($x) {return sprintf("%04X",ord($x));},str_split($in))); 

一個襯墊;)

+1

對不起,這不起作用。 – deceze 2012-07-31 14:34:54

+1

噢......它不是多字節安全的,是嗎? – 2012-07-31 14:35:40

+1

'ord'和'str_split'都不是。 – deceze 2012-07-31 14:36:48