1、產生原理:在數據庫使用了寬字符集而WEB中沒考慮這個問題的情況下,由于OXBF27是兩個字符,在PHP中 addslash和magic_quotes_gpc開啟時,會對Ox27單引號進行轉義,因此 Oxbf27會變成Oxbf5c27。
而數據進入數據庫中時,由于0XBF5C是一個另外的字符,因此\轉義符號會被前面的bf帶著"吃掉",單引號由此逃逸出來可以用來閉合語句。
2、根本原因:character_set_client(客戶端的字符集)和character_set_connection(連接層的集)不同,或轉換函數如,iconv、mb_convert_encoding使用不當。
3、解決辦法:統一數據庫、Web應用、操作系統所使用的字符集,避免解析方產生差異,最好都設置為UTF-8。或對數據進行正確的轉義,如mysql_real_escape_string+mysql_set_charset的使用。