discuz “欣” “衡” 用户不能注册
原因是 discuz 有这样一段代码
function check_username($username) { $guestexp = 'xA1xA1|xACxA3|^Guest|^xD3xCExBFxCD|xB9x43xABxC8'; if(preg_match("/s+|^c:\con\con|[%,*"s<>&]|$guestexp/is", $username)) { return FALSE; } else { return TRUE; } }
$guestexp = 'xA1xA1|xACxA3|^Guest|^xD3xCExBFxCD|xB9x43xABxC8';
会匹配 ,带有"欣","衡" 的用户名,因为
再utf-8 中 , "欣"编码为:xE6xACxA3, "衡"编码为:xE8xA1xA1
bug修改:
$guestexp = 'xA1xA1|xACxA3|^Guest|^xD3xCExBFxCD|xB9x43xABxC8';
改为:
$guestexp = '(?<!xE8)xA1xA1|(?<!xE6)xACxA3|^Guest|^xD3xCExBFxCD|xB9x43xABxC8';
这样既可以匹配带有 xA1xA1|xACxA3 编码的utf-8 特殊字符,又不会匹配 "欣","衡"。