因为公司项目需要整合Discuz Ucenter用户中心,并依托Ucenter为基础,方便以后其他应用中的用户一致性。在最近几天开发用户这块地方的时候,一不小心就深入到Ucenter里了,今天并分享挖掘出来的结论,也许对你们有帮助。主要解决各个应用之间对用户名在不同编码、语言开发中的长度Length限制做了一次深入的挖掘。

首先我们复习一下“字符”这个玩意儿。

在Javascript中,不管utf-8还是gbk,一个汉字总是等于2个字符的,不过全角的情况比较特殊,有些是1.5个字符。

在PHP中,utf-8编码情况下,一个汉字是等于3个字符;而gbk编码下,一个汉字是等于2个字符。

Ucenter的members表中的username字段是设计为VARCHAR(60),其实是有原因的。我慢慢道来。

要成为Ucenter一个会员,其中一个规则就是用户名必须在 3 ~ 15 之间,我没有说单位,是马上要解释。 3 ~ 15可以是3至15个字符,也可以理解为3-15个汉字,Ucenter不管你汉字还是字母数字,反正按个数,必须在3~15之间(包括3和15),那么我们来换算一下PHP后,在utf-8编码情况下,15个汉字是45个字符;gbk编码下是30个字符,这下你就会明白为什么用户表member字段要设置为VARCHAR(60)了吧,当然可能60长度有点多余的,那是因为VARCHAR属性决定了可以扩展的,至少你不能设计为长度小于30吧。

根据Ucenter的设计规则,那么我们前台判断用户名长度的时候,利用Javascript就要去做4-30个字符限制判断。

附上utf-8下的php判断代码一则

        if (Check::userName($username, 2, 15, 'CHINESE2')) {
            $arr_return['error'] = -10;
            $arr_return['message'] = '用户名限汉字、数字、字母或下划线,且不能以数字和下划线开头';
            $this->jsonp_echo($arr_return);
        }
分类: PHP之路 标签: DiscuzUcenter挖掘深度用户编码规则长度

评论

暂无评论数据

暂无评论数据

目录