set_error_handler 說明:http://php.net/manual/en/function.set-error-handler.php
以下例子則是將捕捉的錯誤丟出 Exception,
然後再統一用 mb_convert_encoding 轉成 UTF8
function handleError($errno, $errstr, $errfile, $errline, array $errcontext) { if (0 === error_reporting()) { return false; } /* if (preg_match('/936$/', setlocale(LC_ALL, ""))) { $sys_encoding = "GBK"; //簡體 } else { $sys_encoding = "BIG5"; }*/ $sys_encoding = "UTF-8,BIG5,gb2312,gbk"; $errstr = mb_convert_encoding($errstr, "UTF-8", $sys_encoding); throw new ErrorException($errstr, 0, $errno, $errfile, $errline); } set_error_handler('handleError');
註1:2013-01-28 遇到一個環境,setlocale(LC_ALL, "") 的值是 Chinese_Taiwan.950,但 PHP 錯誤訊息編碼是 UTF8,還要再研究看看 PHP 錯誤訊息的編碼是怎麼決定的。
註2:2013-02-04 使用 sqlsrv 操作 MS SQL 時,發現資料庫密碼錯誤回傳訊息是 UTF8 的編碼,query 時語法錯誤則是回傳 Big5 的編碼,所以改設定 mb_convert_encoding 的第二參數設定可能的編碼。
沒有留言:
張貼留言