NCR 轉換

今天在處理另一個 BIG5 相關的問題, 主要是關於 NCR (Numeric character reference) 的東西, 然後突然看到下面這段, 將字串轉換為 NCR 的方法, 發覺…以前的轉換 NCR 的方式根本是在轉心酸的阿! ~"~

// convert UTF-8 string to NCR
mb_convert_encoding($utf8_str, 'HTML-ENTITIES', 'utf-8');

// convert NCR back to UTF-8
mb_convert_encoding($ncr_str, 'utf-8', 'HTML-ENTITIES');  

不過今天處理的問題也跟上面的函式扯不上關係 XD 描述一下問題好了, 就是說, 有使用者複製了一段"簡體"的UTF-8字串, 然後在 BIG5 編碼網頁的表單中貼上。然而這些簡體的UTF-8字元, 有些字沒辦法被轉為 BIG-5, 所以就維持UTF-8, 不過因為顯示的關係, 被瀏覽器(系統?)轉為了 NCR, 所以表面上使用者看到的是, 完全無誤的字串顯示, 可是當表單送出之後, 就挫賽啦! 後端收到的包含了 NCR 阿!!!

所以我們必須告訴使用者, 他所輸入的字串當中, 包含了沒辦法被系統送出的字(終端只能顯示 big5 的字), 所以我就用了下面這個方式

$str = 'blahblah'; if (preg_match_all('/&#d+;/', $str, $match)) {
$err_chars = implode(', ', $match[0]); echo $err_chars . ' can not be delivered!'; }

不過上面這個範例就是預設使用者不會想送出 寮 這種字串了 XD 不然就是詢問使用者是否確定要送出。 hmm… 看來我還是要把 NCR 研究清楚才行 :p

tzangms

Read more posts by this author.

Subscribe to Oceanic / 海海人生

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!