我需要使用php + codeigniter编写一个网站,以便与utf 16字符集一起使用。
所以转换它,
我已将database.php设置转换为:
$db['default']['char_set'] = 'utf16';
$db['default']['dbcollat'] = 'utf16_unicode_ci';
我已将config.php设置为:
$config['charset'] = 'UTF-16';
这似乎解决了输出数据时引起的问题,但我现在遇到了一个新问题。
我的表单验证检查已开始失败,特别是长度为1。
即在调试时我发现它使用mb_strlen函数将admin@admin.com作为长度为7。
请注意,在charset更改之前它正常工作!字符集更改后问题就开始了。
更新:如果你做了mb_strlen($ str,'utf-8')我会得到正确的答案,这意味着我从表单中获得了utf-8编码的字符串。
从
更改min_length函数public function min_length($str, $val)
{
if (preg_match("/[^0-9]/", $val))
{
return FALSE;
}
if (function_exists('mb_strlen'))
{
return (mb_strlen($str) < $val) ? FALSE : TRUE;
}
return (strlen($str) < $val) ? FALSE : TRUE;
}
到此:
public function min_length($str, $val)
{
if (preg_match("/[^0-9]/", $val))
{
return FALSE;
}
if (function_exists('mb_strlen'))
{
echo $str,"<br/>";
echo mb_strlen($str),"<br/>";
echo $val;die();
return (mb_strlen($str) < $val) ? FALSE : TRUE;
}
return (strlen($str) < $val) ? FALSE : TRUE;
}
我得到以下输出:
admin@admin.com
7
8
即将admin@admin.com作为长度7!
答案 0 :(得分:0)
使用它:
$utf16_string = unicode_encode($string, 'UTF-16');
echo strlen($utf16_string);
所以只有在将其转换为utf-16之后,strlen()才能正常工作
答案 1 :(得分:0)
是正确的,因为转换后
"admin@admin.com" = 摡業䁮摡業潣
^---------- after conversion to UTF-16
并且
mb_strlen('admin@admin.com') // 15;
mb_strlen('摡業䁮摡業潣') // 7;