看板 PHP 關於我們 聯絡資訊
※ 引述《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