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