作者PHP5 (Powered by Zend Engine2)
看板PHP
標題Re: [請益] 網頁big5 + mysql utf8 時
時間Sun Aug 17 12:20:20 2008
※ 引述《tonytsai88 (我愛吃涼麵)》之銘言:
: 如果我的網頁是 big5 charset
: 但 mysql 資料庫是 utf8
: 我的資料裡面有中文,insert 到資料庫時要怎麼做才正確呢
: 我目前是先 SET NAMES big5
: 雖然這樣子讀取資料庫裡的中文資料, 可以正常的在網頁顯示中文
: 但是我 insert 到資料庫的時候,最後一個字如果是中文特殊字,比如說「餐」、「珮」
: 就會有 insert fail 的情況
: 我目前是有把 magic_quotes_gpc 設為 ON
: 請問該如何處理才是正確的呢
首先建議不要動不動就去改php.ini來配合程式
最好用最嚴謹的php.ini,讓程式換到其他平台也能正常運作
----- big5 分隔線 -------
自從愛上utf8後, 很久沒用 big5了
mysql 自從5.0後 (好像4.1也是) ,骨子裡(system)是utf8
只是跟 client 溝通可以選 utf8或big5
首先 SET NAMES big5
以下這些function是參考osc,不過做法跟它不太一樣
// 強制把 magic_quotes_gpc 關掉
function MY_db_prepare_input($string)
{
if (is_string($string))
{
return (get_magic_quotes_gpc()) ? stripslashes($string) : $string;
}
elseif (is_array($string))
{
reset($string);
while (list($key, $value) = each($string))
{
$string[$key] = MY_db_prepare_input($value);
}
return $string;
}
else
{
return $string; // neither string nor array
}
}
if (get_magic_quotes_gpc())
{
$_GET = MY_db_prepare_input($_GET);
$_POST = MY_db_prepare_input($_POST);
$_COOKIE = MY_db_prepare_input($_COOKIE);
}
// 寫入 mysql
// 處理許蓋功問題
// determine if mysql query need addslashes
$test_string = '許蓋功 ';
$test_string_result = mysql_result (mysql_query ("SELECT '$test_string'"),0,0);
if ($test_string == $test_string_result)
define ('MYSQL_NEED_ADDSLASHES', false);
else
define ('MYSQL_NEED_ADDSLASHES', true);
// INSERT入 mysql 時先 MY_db_input() 處理字串
function MY_db_input($string)
{
return (MYSQL_NEED_ADDSLASHES == true) ? addslashes ($string) : big5_addslashes ($string);
}
addslashes 跟 big5_addslashes 的差別
許a\b' ===> addslashes ===> 許\a\\b\'
許a\b' ===> big5_addslashes ===> 許a\\b\'
big5_addslashes() 有點長,請自行下載 osc (好像要下載舊版,新版的改用utf8了),
參考 big5_func.inc 。
http://twpug.net/modules/wfdownloads/singlefile.php?cid=24&lid=214
上面這個載點是 goole big5_addslashes 估到的
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.242.190
推 bcse :好有趣的Fix (或者說是好刻苦的Fix?XD) 08/17 13:50
推 shadowjohn :謝好經驗,感謝PHP5分享Orz 08/18 00:06
→ kylekai :很棒的處理..:) 08/18 14:02