Archive

Posts Tagged ‘編碼’

CodeIgniter 設定 MySQL 編碼

十二月 22nd, 2007

※ CodeIgniter 1.6 已釋出,不需再做這篇的修正了哦!

先前有提到CodeIgniter 這個 PHP Framework,也用它做了幾個 case,當然開發速度不能說快上多少,但確實讓程式碼變得整齊優雅許多。

使用 CI 目前遇到第一個問題是存取 MySQL 資料的問題,在 MySQL 4.1 以後採用了多層式編碼設定,簡單說就是不管是資料庫、資料表、欄位或是 Client 連線階段,都可以分別設定編碼,所以即使 server 都改成了 utf8,PHP 到 MySQL Server 的這個 connection 卻還是預設的(latin1),許多亂碼就是這樣造成的,應該已經有不少人知道解決方法,就是先送出一個改變編碼的查詢:SET NAMES 'charset'。
然而目前 CodeIgniter 並沒有這樣的設計,所以只好自行改 code 囉!

Step1:修改 system/application/config/database.php
增加一項:$db['default']['charset'] = "utf8";

Step2:修改 system/database/DB_driver.php
在 32 行之後的宣告增加:var $charset = '';
接著 96 行的陣列增加:'charset' => '',

Step3:修改 system/database/drivers/mysql/mysql_driver.php
74 行 return 前加入:


if (!empty($this->charset))
{
    @mysql_query("SET NAMES $this->charset");
}

這樣就 ok 了,如果使用 mysqli 請如法炮製。另外如果主機環境符合,可使用 PHP 內建函式來設定:


// PHP >= 5.2.3,MySQL >= 5.0.7 for mysql
@mysql_set_charset($this->charset, $this->conn_id);
// PHP >= 5.0.5,MySQL >= 5.0.6 for mysqli
@mysqli_set_charset($this->conn_id, $this->charset);

PHP, 程式筆記 , , ,

IE 網頁編碼判斷錯誤

一月 14th, 2006

當網頁寫出來用 IE 瀏覽時,卻發現網頁沒辦法自動選擇正確的編碼,都要重新整理或手動選擇編碼才會正常。
請檢查您的 HTML 原始碼,看 TITLE 是否在指定編碼的 MATA 之上,如果是的話,請把 MATA 移到 TITLE 之前,這樣就可以解決 IE 誤判的情形了,正確應該如下:


<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>網站標題</title>

網頁設計 , ,