台灣最大程式設計社群網站
線上人數
1715
 
會員總數:240909
討論主題:186667
歡迎您免費加入會員
討論區列表 >> PHP >> PHP如何取得中文字內碼?(為判定該字是否為造字)
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
PHP如何取得中文字內碼?(為判定該字是否為造字)
價值 : 20 QP  點閱數:139 回應數:6

樓主

Eric16899
初學者
598 133
1769 303
發送站內信

請問PHP如何取得中文字內碼?(為判定該字是否為造字)

"乙"內碼為"A441",ASP程式區範例ASC('乙') 可得到 A441
而 chr("&h" & "A441") 就會還原為 "乙"

我使用PHP(網頁編碼big5) ORD('乙')得到 164
PHP(網頁編碼UTF8) ORD('乙')得到 228
都不是A441
請問為啥??


搜尋相關Tags的文章: [ PHP ] ,
本篇文章發表於2017-10-13 14:31
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

小羊窒息
捐贈 VP 給 小羊窒息 檢舉此回應
big5的中文是2個byte

==============

php的ord是直接取得第一個byte,... 164就是16進位的A4

==============
網路上現成的參考程式碼

http://snipplr.com/view/9947/

其做法是把每個byte加起來...得到229


也就是 【A4】【41】的 10進位值, 164 + 65 = 229

想要得到A4, 41的話就, 多加一個10進位轉16進位, 就可以得到你想要的A4, 41了
本篇文章回覆於2017-10-13 17:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

Eric16899
檢舉此回應
感謝 小羊窒息 大大

在編碼BIG5的PHP bin2hex("乙")可取得A441

在編碼UTF8的PHP bin2hex("乙")確是 e4b999
請問這原理OR 原因是?

本篇文章回覆於2017-10-13 17:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
這其實有一些是數學觀念的東西

其實big5碼就是2個byte 。也就是 FF FF 4位數的16進位碼
所謂的內碼其實就是其文字的16進位碼位置。

但是utf8是採用3位元。也就是是用FF FF FF來做記錄。
不過其對應的ascii碼並不會直接改變。相對的其對應內碼的位置也不一樣。

ISO碼好像是用4個位元做記錄。

其實~~~~你可以用比較簡單的方式。先將中文字編碼直接轉成big5編碼。再去跑你原先的判斷就行了。
畢竟所謂的內碼,其實也只不過是big5碼中的一個文字指標而已。
目的也只是為了要對應字型檔的位置而已。
本篇文章回覆於2017-10-13 17:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

Eric16899
檢舉此回應
感謝 浩瀚星空大大 指導
再請教

如果判斷造字寫成FUNCTION()
get_bigCode.php(傳入BIG5中文 傳回BIG5編碼)

主程式 UTF8編碼
user_list.php
(1)incloud(get_bigCode.php)
(2)連到big5資料庫 取得客戶姓名
將取得取得客戶姓名,逐字檢查 傳入 get_bigCode.php Function

如果傳回>=FA40(造字區邊碼) 認定為造字...

但是碰到問題
(A)主程式 UTF8 但須要incloud BIG5編碼的function 程式get_bigCode.php 這樣編碼不就亂了??
(B)big5資料庫 取得姓名 放到 主程式 UTF8 變數存放, 以UTF8變數存放big5內容.再傳給function 再傳回big5編碼...好像也亂了??
(C)big5資料庫 取得姓名 還沒iconv("big5","UTF-8",$str) 前直接bin2hex($str) echo 出來也不是BIG5碼...

因為原本 資料庫是BIG5 要轉成UTF8資料庫(須克服 BIG5造字 有些UTF8有不用延用造字 有些要延用...)
還要克服 瀏覽器無法顯示造字問題(WIN10 EDGE...CHROME...)
都在BIG5 UTF8 切換都快暈了

本篇文章回覆於2017-10-13 22:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

淺水員
檢舉此回應
假設程式A可以正確取得BIG5編碼(含造字)
那麼可以利用程式A新增一個binary欄位
儲存的是BIG5字串的16進位值
再利用程式B去讀取id與binary欄位來轉換即可
本篇文章回覆於2017-10-16 13:54
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
其實你的問題可以利用css的載入字型的特性來解決的。

當然了,這得先了解如何載入伺服端的造字檔。
而且還要解決big5碼跟utf8碼造字檔的轉換問題。

而且其實你也不需要切換來切換去的。
因為只要下編碼函數帶入處理就行了。你的目的只是要取得內碼而已。
所以轉換過來的中文碼用完了就可以unset掉了。

你的顯示還是維持在其utf8碼就行。
本篇文章回覆於2017-10-17 14:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.