2016-05-23 98 views
0

我正在使用PHP進行此Web開發項目。現在,我正在處理用戶頁面,用戶可以在其中添加他知道的單詞。當然,我開始粗糙,沒有添加任何特殊功能,但你喜歡這個角色的建議等等。如何將中文字符轉換爲UTF-16編碼單元?

我已經解決了在我的UTF-16中添加UTF-16排序規則和字符集的挑戰MySQL數據庫,實際上在http://freemysqlhosting.net在線支持中文字符在我的網站。現在我正在努力的是爲我的漢字支持自動拼音生成。

我搜索過所有的搜索結果後發現這個:https://github.com/reorx/pinyindep/blob/master/Uni2Pinyin。每行以UTF-16代碼單位的中文字符開頭。

舉個例子,愛。在UTF-16中,它是。我將其轉換爲https://r12a.github.io/apps/conversion/。當我在文件中查找時,我得到了相關的拼音。 :D這是我需要的功能,儘管在GitHub中查找它是使用JS而不是PHP。

在手動查找中,返回ai4,這是正確的語調。現在,我正在尋找的是PHP內置庫或用於將此字符串輸入轉換的代碼片段,讓我們將其稱爲UTF-16四字符代碼單元,例如。

那麼,有什麼問題:

我應該如何轉換爲中國的性格,在形式的字符串,以UTF-16編碼單元? (通過內置庫或通過建議的PHP代碼片段)

P.S.除非他們真的非常受歡迎,否則我不太喜歡第三方工具,或者沒有別的選擇。

回答

2

您需要使用PHP的multibyte string模塊:

$c = "愛"; 
list(, $d) = unpack('N', mb_convert_encoding($c, 'UCS-4BE', 'UTF-8')); 
echo dechex($d); 
// => 7231 

變化UTF-8UTF-16,如果你的字符串是從在編碼數據庫中來。

mb_convert_encoding將字符串轉換爲每字符四字節編碼;那麼unpack將四個字節轉換爲一個無符號長整型;最後,使用dechex轉換爲十六進制字符串。

+0

哦,太酷了!謝謝先生!祝你今天愉快! – Muymuy1

+0

但是爲什麼我無法立即從mb_convert_encoding獲取它? – Muymuy1

+0

因爲'「7231」'不是一種編碼。 – Amadan

相關問題