Php codeigniter,转换为utf 16字符集,表单验证长度错误

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'] =

嘿,伙计们,希望你们能帮我

我需要做一个用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'] = '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;