0

やあみんなはあなたが私を助けることができることを望んでいた。

utf 16文字セットで動作するには、php+codeigniterでコード化されたWebサイトを作成する必要があります。

だからそれを変換するには、

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として使用しています!

4

2 に答える 2

0

これを使って:

   $utf16_string = unicode_encode($string, 'UTF-16');

   echo strlen($utf16_string);

したがって、utf-16に変換した後でのみ、strlen()-は正しく機能します

于 2012-10-21T14:38:53.130 に答える
0

はい、正しいです。変換後

 "admin@admin.com" = 摡業䁮摡業⹮潣
                        ^---------- after conversion to UTF-16

 mb_strlen('admin@admin.com') // 15;
 mb_strlen('摡業䁮摡業⹮潣') // 7;
于 2012-10-21T14:50:06.330 に答える