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