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个字符,强制使用一些staciguser\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,但仍然没有成功。