PHP Insert函數常常發生亂碼的現象,這是因為數據庫默認的編碼方式與網站程序自己所用的編碼方式不同而引起的。多數情況下,我們在插入一些類似與“中國”、“梨花”之的中文數據的時候才會遇到這種亂碼問題。此時我們需要使用一些技巧,將網站編碼方式與數據庫編碼方式統一,避免出現亂碼的情況。
在 PHP Insert 函數中,若直接使用UTF-8編碼,程序會支持國際化,而在 HTML 代碼中設置的話,讀入數據庫的編碼方式會是UTF-8。若出現亂碼,需要設置頁面默認編碼為UTF-8,這樣網站和數據庫在編碼方式上就會保持一致。
同時,在插入內容時,將相關的不良字符去掉或轉換為可讀的字符是比較關鍵的。下面是一段PHP源碼,即可將不合規字符過濾:
function filter_str($str) { $farr = array ( "/\s+/", //過濾多余回車 "/<[ ]+/i", //過濾<__ "<"之間帶空格 "/<([\w]+)[^>]*>/i", //過濾< "/<\/([\w]+)[^>]*>/i",//過濾 "/([\w]+)[^>]*>/i", //過濾>"{\\\\*}is", //過濾\ "{\\/*}is", //過濾/ '/[\n\r\t]/',//過濾空格 ); $tarr = array ( " ", "<\$1 ", "<\$1>", "</$1>", "<\$1>", "", "", '', ); $str = preg_replace ($farr, $tarr, $str); return $str; }這段過濾函數主要用來過濾一些空格、回車、斜杠、小于號等等這些不良字符。將不良字符過濾完之后,PHP Insert 函數再次運行,基本上就不會出現亂碼現象了。此外,需要注意的是,在插入數據庫的字符串需要先進行轉碼,具體可以使用php內置函數 - iconv(),將 UTF-8 轉換為 GBK,即可規避插入中文字符時出現的亂碼問題。下面是具體的示例代碼:
header("Content-Type:text/html; charset=utf-8"); $conn = mysql_connect("localhost", "root", "password") or die(mysql_error()); mysql_select_db("test") or die(mysql_error()); mysql_query("SET NAMES 'GBK'"); $str = "梨花"; $str = iconv("UTF-8", "GBK//TRANSLIT", $str); $res = mysql_query("INSERT INTO test (name) VALUES ('$str')"); mysql_close($conn);在上述代碼中,我們首先設置了頁面的編碼為 UTF-8 格式,同時在連接數據庫時也設置了數據庫的編碼方式為 GBK。然后,我們將插入的字符串進行了轉碼,將 UTF-8 格式的字符串轉換為 GBK 編碼格式的字符串,最后再進行 Database Insert 操作。 在實際開發中,PHP Insert 函數常常會出現亂碼的問題,但通過上述介紹的解決技巧,我們可以避免出現亂碼的現象,讓程序更加規范和穩定,提高了我們的開發效率和程序品質。