A-A+

WordPress 注册支持中文

2014年03月20日 PHP开源系统 评论 18 条 阅读 217 views 次

WordPress的用户名一共有三种,我们打开users表就可以看到这三种分别是user_login、user_nicename、 display_name,第一个user_login指的是登录名,第三个display_name指的是显示在前台文章、评论里面的名字。

display_name是可以显示中文字符的,也是允许用户自行修改的,但是代表用户唯一身份的user_login确实并不支持中文用户名,注册后也不允许自行修改。

虽然很多情况下user_login不支持中文用户名也无伤大雅,可以有display_name在前台应付,不过有时候我们还是希望user_login也支持中文用户名。

分析WP的代码发 现,问题出在sanitize_user这个函数上。WP使用这个函数对用户名进行过滤,这个函数的第二个可选参数$strict默认是关闭 (flase)的,即不进行相关字符屏蔽。WP在用户名的注册和修改过程中在validate_username和wp_insert_user两个函数 中调用了sanitize_user,并且以ture为第二个参数的值,这样就屏蔽了数字和字母以外的字符(only alphanumeric characters)。

sanitize_user在wp_includes/formatting.php中定义,其函数体如下:

function sanitize_user( $username, $strict = false ) {
$raw_username = $username;
$username = wp_strip_all_tags( $username );
$username = remove_accents( $username );
// Kill octets
$username = preg_replace( '|%([a-fA-F0-9][a-fA-F0
-9])|', '', $username );
$username = preg_replace( '/&.+?;/', '', $usernam
e ); // Kill entities

// If strict, reduce to ASCII for max portability.
if ( $strict )
$username = preg_replace( '|[^a-z0-9 _.\-@]|i', '', $username );

// Consolidate contiguous whitespace
$username = preg_replace( '|\s+|', ' ', $username );

return apply_filters( 'sanitize_user', $username, $r
aw_username, $strict );
}

这样,我们简单地在第746行前面加上//注释掉这个语句,就可以支持中文用户名了。当然,根据版本不同,你的不一定也是第746行。

//$username = preg_replace( '|[^a-z0-9 _.\-@]|i', '', $username );

标签:

18 条留言  访客:18 条  博主:0 条

  1. 喵小姐

    对了,,我是不是也得回敬你一个爱称呢~~~~你觉得“夏夏”怎么样呢~~

  2. 喵小姐

    提到英语就头疼~~~福音呢

  3. 40小编

    先收藏了,以后有机会用。

  4. 殘簫

    好像用處不大!~~

  5. 彼岸时光网

    对我来说用处不大,因为尚未开启用户注册,感觉wp的用户管理太简陋了。

    • smiling

      对于小博客来说,wp的用户注册几乎用不到.

  6. 冯耀宗

    用的比较少,不知道博主可不可以把留言板下面的英文代码去掉。

    • smiling

      留言板下面的英文是什么?

  7. 仰茗博客

    在这里寻求答案,总有一些问题是会遇到的。

  8. 凌吉林

    每天过来看一看,支持一下夏日博客

  9. 眼幕微启

    中文名意义不大吧,反正有昵称

    • smiling

      其实我是比较喜欢英文注册的.

  10. 漫道狂徒

    博主这个犀利

  11. 怡迪美玩具专营店

    我有个个人的博客,可以放上。谢谢博主了。

  12. 恋羽

    直接添加一个钩子返回就行了。
    add_filters(‘sanitize_user’,function($r,$u,$f){return $u;});

  13. 恒创主机

    此项功能太强大了,感谢博主的分享,还是支持中文的好。期待更多新的功能出现···

  14. 小骆驼网

    技术宅男啊,佩服佩服!

  15. 林梓洁博客

    期待这个功能很久了,博主写的不错

给我留言