WordPress 主题制作技巧之三 [ 支持中文用户名登录 ]

如果你也正在用wordpress作为博客或者企业网站,那么一定对这个用户页面并不陌生:

Wordpress的强大地球上的人都清楚,但是从另一方面说,它有时候也会让我们感到繁杂。比如用户设置吧,从上面的图中就可以看到关于名称的设置就有“用户名”、“名”、“姓”、“昵称”、“公开显示名称”,除了“名”和“姓”可以不设置,另外三个都要设置

想用中文名作为“用户名”的用户可能会遇到这样的问题:当以中文字符注册时,系统提示错误:

如今连域名都支持中文字符了,wordpress这么流行的东西居然还不支持中文用户名,实在有点说不过去,毕竟现实中确实存在这方面的需求。好在我们可以通过修改系统函数让其支持中文用户名。控制注册字符的函数是在wp_includes/formatting.php中定义的sanitize_user,代码如下

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( '/&.+?;/', '', $username ); // 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, $raw_username, $strict );
}

这个函数之所以能够控制中文字符的注册,是因为系统中用户名的注册和修改函数(wp-includes/user.php中的validate_username和wp_insert_user)在执行时引用了sanitize_user函数,并且将sanitize_user函数的第二个参数的值置为“true”,这样sanitize_user函数中的

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

也因此屏蔽了uername字符串中字母和数字以外的字符。所以要想让username支持中文,有两种方法:

1)在sanitize_user函数注释掉 if 语句;
2)在用户名注册和修改函数调用sanitize_user时将第二个参数值置为“false”。

这样就OK了,不过如果没有中文用户名注册需求的话,还是建议不要修改wordpress的系统函数。 

 

posted @ 2012-05-19 09:29  刘笨笨  阅读(2062)  评论(0编辑  收藏  举报