Php codeigniter,转换为utf 16字符集,表单验证长度错误
嘿,伙计们,希望你们能帮我 我需要做一个用php+codeigniter编码的网站来使用UTF16字符集 因此,要转换它 我已将database.php设置转换为:Php codeigniter,转换为utf 16字符集,表单验证长度错误,php,codeigniter,validation,utf-16,utf,Php,Codeigniter,Validation,Utf 16,Utf,嘿,伙计们,希望你们能帮我 我需要做一个用php+codeigniter编码的网站来使用UTF16字符集 因此,要转换它 我已将database.php设置转换为: $db['default']['char_set'] = 'utf16'; $db['default']['dbcollat'] = 'utf16_unicode_ci'; $config['charset'] = 'UTF-16'; 我已将config.php设置为: $db['default']['char_set'] =
$db['default']['char_set'] = 'utf16';
$db['default']['dbcollat'] = 'utf16_unicode_ci';
$config['charset'] = 'UTF-16';
我已将config.php设置为:
$db['default']['char_set'] = 'utf16';
$db['default']['dbcollat'] = 'utf16_unicode_ci';
$config['charset'] = 'UTF-16';
这似乎解决了输出数据时出现的问题,但我现在遇到了一个新问题
我的表单验证检查开始失败,特别是长度验证
i、 调试时,我发现它需要admin@admin.com使用mb_strlen函数将长度设置为7
注意,在更改字符集之前,它工作正常!更改字符集后开始出现问题。
更新:如果你使用mb_strlen($str,'utf-8'),我得到了正确的答案,这意味着我从表单中得到了utf-8编码的字符串
将最小长度函数更改为
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;
}
i、 这是一个漫长的过程admin@admin.com长度为7 使用以下命令:
$utf16_string = unicode_encode($string, 'UTF-16');
echo strlen($utf16_string);
因此,只有在将其转换为utf-16之后,strlen()才能正常工作是的,这是正确的,因为转换后
"admin@admin.com" = 摡業䁮摡業潣
^---------- after conversion to UTF-16
及
您使用的是什么版本的php??这个有效:是的,有效。显示15的正确长度。使用php版本5.4.4。此外,表单验证在更改字符集之前工作正常,问题是在更改字符集之后开始的。问题是,传入的数据是utf 8格式的。i、 e“mb_strlen($str,'utf-8')”给出了正确的结果。
utf-8
与utf-16
不同???UTF-8肯定会给你15,因为它会返回admin@admin.com
也许您尝试将.htaccess文件放入应用程序“addDefaultCharset UTF-16”的根目录中?是的,您是对的。。在进一步阅读之后,我发现您应该在index.php文件中添加“header('Content-Type:text/html;charset=utf-16');”。我这样做了,然后所有的东西都以类似汉字的方式展示出来。那我该怎么解决呢?哈哈。。。认为你是中国功夫高手,这就是你需要UTF-16的原因。。。我的建议是将电子邮件或数据库条目转换为……)英雄联盟你说的转换电子邮件是什么意思?我已经将我的数据库转换为utf16_unicode_ci。现在我得到的数据来自一个表单。好的,在验证或字符串长度计数期间将其转换为UTF-8
mb_strlen('admin@admin.com') // 15;
mb_strlen('摡業䁮摡業潣') // 7;