Php 用希伯来语在wordpress中注册用户名

Php 用希伯来语在wordpress中注册用户名,php,database,wordpress,Php,Database,Wordpress,我想在我的网站能够为访问者注册一个希伯来语用户名 在我的网站上,当我尝试用希伯来文字符用户名注册时,它不会给我任何错误, 用户收到一封电子邮件,表示他已成功注册,管理员收到一封包含用户详细信息的电子邮件 但是 用户实际上没有注册到数据库。。。他没有显示在用户表中,当他尝试登录时,出现一个错误,表示没有这样的用户 英语用户名不会出现这种情况 有办法解决这个问题吗 您需要更改MySQL服务器连接排序规则。如果您有PhpMyAdmin,只需登录到PhpMyAdmin即可更改。然后,在首页上,您将看到服

我想在我的网站能够为访问者注册一个希伯来语用户名

在我的网站上,当我尝试用希伯来文字符用户名注册时,它不会给我任何错误, 用户收到一封电子邮件,表示他已成功注册,管理员收到一封包含用户详细信息的电子邮件

但是

用户实际上没有注册到数据库。。。他没有显示在用户表中,当他尝试登录时,出现一个错误,表示没有这样的用户

英语用户名不会出现这种情况


有办法解决这个问题吗

您需要更改MySQL服务器连接排序规则。如果您有PhpMyAdmin,只需登录到PhpMyAdmin即可更改。然后,在首页上,您将看到服务器连接排序规则(在General选项卡上)

将服务器连接排序规则更改为hebrew_general_ci,以支持数据库中基于希伯来语的文本

参考资料:


希望有帮助

问题的简短描述:(以及可能的解决方案)

wordpress创建用户名称时(“包含用户URL友好名称的字符串”)

如果您指定了希伯来语用户名,这将是html实体的列表。 在我的测试中,希伯来语用户名是“בדיקק㩉קק”,带有一个经过消毒的用户名“%d7%91%d7%93%d7%99%d7%a7%d7%94%d7%a7%d7%d7%94%d7%a7%d7%a7”(54个字符)

wordpress数据库中用户名字段的长度为50个字符。(顺便说一句,这解释了为什么它可以使用最多8个字符的用户名)

查看user.php的Wordpress代码,我们可以看到Wordpress在插入用户之前正在检查
user\u nicename
的长度,但它不起作用

让我告诉你为什么: 检查
user\u nicename
length的代码如下:

$user_nicename = sanitize_user( $userdata['user_nicename'], true );
    if ( mb_strlen( $user_nicename ) > 50 ) {
        return new WP_Error( 'user_nicename_too_long', __( 'Nicename may not be longer than 50 characters.' ) );
    }
使用希伯来语用户名时,无论生成的
user\u nicename
的长度如何,该条件始终为true,因为函数
sanitize\u user()
“删除所有不安全字符”-包括html实体,并返回一个空字符串,长度为0

最终通过检查,您可能会觉得用户创建时没有错误,但这不是因为数据超过了
user\u nicename
中的字段长度

可能的解决方案是以编程方式将字符串剪切为50个字符,强制使用一些stacig
user\u nicename
,如“user-1”、“user-2”等,或者使用拉丁字符作为
user\u nicename
或自定义库/函数

我选择了上一个解决方案,因为我使用了共享主机,没有安装其他库的选项

工作代码 插入到我的模板的function.php中:

// user creation with Hebrew usernames

//function to transliterate username
function convert_user_nicename($hebrew_username) {
    $charset = array('א'=>'a','ב'=>'b','ג'=>'g','ד'=>'d','ה'=>'h','ו'=>'v','ז'=>'z','ח'=>'h','ט'=>'t','י'=>'y','ך'=>'k','כ'=>'k','ל'=>'l','ם'=>'m','מ'=>'m','ן'=>'n','נ'=>'n','ס'=>'s','ע'=>'e','ף'=>'p','פ'=>'p','ץ'=>'ts','צ'=>'ts','ק'=>'q','ר'=>'r','ש'=>'sh','ת'=>'t');
    $latin_user_slug = '';
    $chars = mbStringToArray($hebrew_username);
    foreach ($chars as $key =>$char) {
        $latin_user_slug .= $charset[$char];
    }
    return($latin_user_slug);    
}
function mbStringToArray ($string) { 
    $strlen = mb_strlen($string); 
    while ($strlen) { 
        $array[] = mb_substr($string,0,1,"UTF-8"); 
        $string = mb_substr($string,1,$strlen,"UTF-8"); 
        $strlen = mb_strlen($string); 
    } 
    return $array; 
} 

// remove the filter 
remove_filter( 'pre_user_nicename', 'filter_pre_user_nicename', 10, 1 ); 
function filter_pre_user_nicename($user_nicename) { 
    $heb = html_entity_decode($user_nicename);
    $user_nicename = convert_user_nicename($heb); 
    return $user_nicename; 
}; 

// add new filter 
add_filter( 'pre_user_nicename', 'filter_pre_user_nicename', 10, 1 );  

也许你的孩子也有同样的问题?我不这么认为,因为它没有表现出吉卜赛人的性格,它没有表现出任何东西。。。我所有的网站都是用希伯来语写的,显示所有的查理特人都很好。。。我已经搜索了3天了,我甚至没有找到和我有同样问题的人…那么,也许是你的MySQL数据库的问题(假设你有MySQL)。您是否尝试过更改数据库的db_字符集?是的,但我不知道我是否做对了…您可以更详细地介绍一下吗?我是否需要在wp-config.php文件中也更改此选项?行------/**表示数据库的校对类型。如有疑问,请勿更改此项。*/定义('DB_COLLATE','')----上面写着如果有疑问就不要改变,我有点怀疑你觉得怎么样?我试过你说的,但还是没有运气。。。我甚至进入了数据库,将wp users表中的排序规则改为user login字段,改为希伯来语\u general\u ci,但仍然没有成功。