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的使用。