嘿家伙希望你能帮助我。
我需要制作一个用 php+codeigniter 编码的网站才能使用 utf 16 字符集。
所以要转换它,
我已将 database.php 设置转换为:
$db['default']['char_set'] = 'utf16';
$db['default']['dbcollat'] = 'utf16_unicode_ci';
我已将 config.php 设置为:
$config['charset'] = 'UTF-16';
这似乎解决了输出数据时引起的问题,但是我现在遇到了一个新问题。
我的表单验证检查开始失败,尤其是长度检查。
即在调试时我发现它使用 mb_strlen 函数将 admin@admin.com 作为长度 7。
请注意,在字符集更改之前它工作正常!字符集更改后开始出现问题。
更新:事实证明,如果您执行 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!