admin 發表於 2015-3-10 08:49:55

json_encode error as strftime return string is not utf8 in Windows 7/8/8.1

從 phpmyadmin 4.1.0 開始就覺得怪怪了,直到目前最新版 4.4.0-alpha1都一樣,有個大問題就是無法看資料表結構。
PHP 本身也存在某些相容性問題要注意
Util.class.php(path in \PhpMyAdmin\libraries) 的 1614 行裏頭有一行
return strftime($date, $timestamp);
只要暫時改成
return date("Y-m-d: H:i:s" , $timestamp);
這樣可以解決無法在 phpmyadmin 看資料表結構的問題

會發生錯誤是因為,phpmyadmin 有很多地方會用 AJAX 的方式要求回傳 json 格式資料,
而 php 的 json_encode() 若遇到不正確的 utf8 字則會回傳 false,導致 phpmyadmin 要抓資料表結構的時候回傳一個空的網頁給前端就會出錯了。
這問題就是出在 strftime(),這個 strftime 會根據 OS 的語系及地區設定回傳相對應的編碼字串,而非完全為 utf-8。
基本上在 Win8 環境下測試他根本不吃 utf-8 字串只吃 big5。
因此以下這段完全以 utf-8 字串寫成的 code ,其中年,月,日三個字的中文在 win8 中文版和 CentOS Linux 下將會得到不同結果
echo strftime("%Y 年 %m 月 %d 日 %H:%M", time());如此就會造成 json_encode 的編碼發生錯誤了。
頁: [1]
查看完整版本: json_encode error as strftime return string is not utf8 in Windows 7/8/8.1