2016年5月26日 星期四

特殊字元寫到DB變成亂碼 -Solution解法


Qussion問題描述: 特殊字元寫到DB會變成亂碼 or ?問號
範例問題字碼: 字碼「é」會存成「é不知有碰過類似的問題嗎?


Answer解答1: 如果您使用的PHP + PDO 連線 + Mysql, 可用此方式.  在DB連線的Config設定中加上這行'SET NAMES UTF8' 實際程式範例如下:

// This is PDO Connection Method
// Connect to Potato Member Center
$HOST_DB="xxx.rds.amazonaws.com";
$DB_NAME="xxx";
$DB_USER="xxx";
$DB_PASS="xxx";

try {
    $db_conn = new PDO("mysql:host=$HOST_DB;dbname=$DB_NAME", $DB_USER, $DB_PASS);
    $db_conn->query('SET NAMES UTF8');  // 重要,可避免呈現亂碼.
} catch (PDOException $e) {
    echo "Could not connect to database";
}

Answer解答2: 您可以在寫入DB資料前加上此函式htmlentities( $str , ENT_QUOTES, "UTF-8"),如此即可以正確將字碼轉成UTF-8再儲存至DB即可。


Reference參考:
1. PHP htmlentities() 函数
http://www.w3school.com.cn/php/func_string_htmlentities.asp

2. 官方網站說明htmlentities — Convert all applicable characters to HTML entities
http://php.net/manual/en/function.htmlentities.php



George Huang 烤蕃薯@Taipei 2016

沒有留言: