古黑币30 个
成长值19894 点
金币2353 个
精华贴12 个
可遇不可求的事:故乡的云,上古的玉,随手的诗,十九岁的你。
一、为什么会有这个问题
这个涉及到的是字符编码的问题,在 UTF-8 中,将衡这个汉字转换为 16 进制的话会是\xE8\xA1\xA1,欣的话则是\xE6\xAC\xA3。
然后在 uc_client/model/user.php 和 uc_server/model/user.php 文件中有这个函数 function check_username
- $guestexp = '\xA1\xA1|\xAC\xA3|^Guest|^\xD3\xCE\xBF\xCD|\xB9\x43\xAB\xC8';
复制代码
上面这个语句导致问题的内容是:匹配是否有字符包含\xA1\xA1 或者\xAC\xA3
然后「衡」 \xE8\xA1\xA1 里面包含 \xA1\xA1 ,「欣」 \xE6\xAC\xA3 里面包含了 \xAC\xA3。于是就被拦截了. ..gif)
二、解决办法
由于本站是 utf-8,所以其他 gbk、big5 版本无法测试(貌似其他版本没有这个问题),下面是 UTF-8 的修改方法:
- $guestexp = '\xE3\x80\x80|^\xE6\xB8\xB8\xE5\xAE\xA2|^Guest|^\xD3\xCE\xBF\xCD';
复制代码
上面过滤了什么?
utf-8 全角空格 、utf-8 游客开头的用户名、Guest 开头的用户名、 gbk 游客开头的用户名
三、原来的是什么?
- \xA1\xA1 = GBK 全角空格
- \xD3\xCE\xBF\xCD = GBK 游客
- \xB9\x43\xAB\xC8 = BIG5 遊客
- \xAC\xA3 = BIG5 派
复制代码
gbk
big5
|
|