2016-03-22 108 views
0

我使用在線短信服務(Clickatell)作爲我使用的網絡應用程序。我的主要語言是希臘語,所以我需要在發送之前將我的PHP文件中的短信文本轉換爲UTF-16BE。例如我需要將文本Clickatell將UTF8文本和數字轉換爲UTF16-BE

「Τοραντεβούσαςέχειμεταφερθείστις2016年12月12日καιώρα18:25」

03a403bf002003c103b103bd03c403b503b203bf03cd002003c303b103c2002003ad03c703b503b9002003bc03b503c403b103c603b503c103b803b503af002003c303c403b903c2002000310032002d00310032002d0032003000310036002003ba03b103b9002003ce03c103b1002000310038003a00320035

我需要CONVER一切inluding轉換空格,符號和數字。 我發現了幾個PHP命令,但它們只轉換文本。

$text=strtoupper(str_replace(array('"', '\u'), array('',''), json_encode('Το ραντεβού σας έχει μεταφερθεί στις 12-12-2016 και ώρα 18:25'))); 

當使用上面的代碼,我得到下面的結果:

03A403BF 03C103B103BD03C403B503B203BF03CD 03C303B103C2 03AD03C703B503B9 03BC03B503C403B103C603B503C103B803B503AF 03C303C403B903C2 2016年12月12日03BA03B103B9 03CE03C103B1 18:25

如果您發現日期和時間以及所有的空間都不是unicode。

誰能告訴我如何讓我的整個詞組在unicode?我怎樣才能做到這一點與PHP? 預先感謝您

+0

請張貼你到目前爲止的代碼。 – BPS

+0

請[編輯]這個問題,幷包括你已經嘗試過並且有問題的[mcve]。 –

回答

1

我不知道你所說的「他們只轉換文本」的意思,但如果你正在尋找一個UTF-8字符串轉換爲UTF-16BE,那麼你可以嘗試:

iconv('UTF-8', 'UTF-16BE', $string); 

或..

mb_convert_encoding($string, 'UTF-16BE', 'UTF-8'); 

編輯:

既然你現在已經共享了一些代碼,您TECHNI que轉換是不健全的,除非你真的想讓它表現得像你一樣。你的結果基本上是個別字節的十六進制表示,但不是字節本身。

編輯2:

如果你真正需要按規定的格式,下面就爲你做它:

$string = iconv('UTF-8', 'UTF-16BE', $string); // .. or mb_convert_encoding 
$converted = ''; 

for ($i = 0; $i < strlen($string); $i++) { 
    $converted .= sprintf('%02X', ord($string[$i])); 
} 
+0

當我使用我在上面添加的代碼我得到如下的結果 03A403BF 03C103B103BD03C403B503B203BF03CD 03C303B103C2 03AD03C703B503B9 03BC03B503C403B103C603B503C103B803B503AF 03C303C403B903C2二○一六年十二月一十二日03BA03B103B9 03CE03C103B1 18:25 –

+0

如果您發現日期和時間,以及所有的空間不會被轉換。 謝謝我試過你的粉筆,但我得到了奇怪的字符和問號 –

+0

'ASCII'值被分配了代碼點,它們與ASCII碼下的原始編碼相關聯。 'UTF-8'向後兼容'ASCII'。 「UTF-16」使用2/4字節來編碼代碼點,2代表BMP字符(包括ASCII)。例如。編碼值「5」產生'\ x00 \ x35'。 '\ x35'是有效的'UTF-8',並且也代表'5'。 '\ x00'被視爲'NULL'。 –