discuz “欣” “衡” 用户不能注册 bug修改

discuz “欣” “衡” 用户不能注册

原因是 discuz 有这样一段代码

function check_username($username) {
                $guestexp = '\xA1\xA1|\xAC\xA3|^Guest|^\xD3\xCE\xBF\xCD|\xB9\x43\xAB\xC8';
                if(preg_match("/\s+|^c:\\con\\con|[%,\*\"\s\<\>\&]|$guestexp/is", $username)) {
                        return FALSE;
                } else {
                        return TRUE;
                }
        }

 $guestexp = '\xA1\xA1|\xAC\xA3|^Guest|^\xD3\xCE\xBF\xCD|\xB9\x43\xAB\xC8';

会匹配 ,带有"欣","衡" 的用户名,因为

再utf-8 中 , "欣"编码为:\xE6\xAC\xA3, "衡"编码为:\xE8\xA1\xA1

bug修改:

 $guestexp = '\xA1\xA1|\xAC\xA3|^Guest|^\xD3\xCE\xBF\xCD|\xB9\x43\xAB\xC8';

改为:

$guestexp = '(?<!\xE8)\xA1\xA1|(?<!\xE6)\xAC\xA3|^Guest|^\xD3\xCE\xBF\xCD|\xB9\x43\xAB\xC8';

 

这样既可以匹配带有 \xA1\xA1|\xAC\xA3 编码的utf-8 特殊字符,又不会匹配 "欣","衡"。

posted @ 2015-05-28 11:36  我来也1010  阅读(433)  评论(0编辑  收藏  举报