使用者反映,有一個頁面上的資料會出現問號,後來我發現問題是該頁面會先載入一份 Big5 文字檔,內容有這樣的文字:

分子分母

因為頁面最終會把內容全部整理好後以 UTF-8 輸出,這段字串會經由 mb_convert_encoding($string,"utf-8","big5") 處理,全型的斜線就會變成問號:

分子?分母

但以前在 PHP 7 以前沒有人反映過這個頁面有問題,搜尋一下,在 "PHP8.1: mb_convert_encoding not working with ASCII chars above 127" 這篇有人提到,他原始輸入的文字是 "ü",但是會被轉換為 "?"。原本他的 mb_convert_encoding 是將 ANSII 轉為 UTF-8,最後他的解法是 ISO-8859-1 轉為 UTF-8。

在 3v4l 試跑,可以發現原本的編碼組合,在 PHP 8.0 版本跑起來還能正常顯示,但到了 PHP 8.1 版本開始就會變成問號了。截至目前 8.2rc7 還未更新,但新版看起來似乎會修改?靜待修正中。

我試著換了幾種編碼,目前都無法正常將 Big5 的符號正確轉換到 UTF-8。目前是先將資料改為半形符號。等找到更合適的解法再來更新。

arrow
arrow
    文章標籤
    php
    全站熱搜
    創作者介紹
    創作者 小攻城師 的頭像
    小攻城師

    小攻城師的戰場筆記

    小攻城師 發表在 痞客邦 留言(0) 人氣()