2011-06-20 9 views
1

サイト全体でutf8データを処理する必要があるように、私のサイトは複数の言語をサポートする必要があります。私は、データベースとのやりとりに関してutf8データのcodeigniterを設定する方法を理解しています。私の質問は、utf8エンコーディングを使用しているとき、フォームフィールドのルールのようなものを、codeigniterがどのように扱うのでしょうか?例えば、strlenをutf8に使う場合、strlenは違うので、mb_strlenの代わりにmbstring関数を使う必要があります。 codeigniterには自動的にそれを処理する設定がありますか?そうするためにcodeigniterの中で設定する必要があるものはありますか?CodeIgniterとutf8関数

答えて

1

それがアクセス可能である場合には、デフォルトでmb_strlen使用しています:するpreg_match関数について

//below default min_length function of CI_Form_Validation lib as an example 

/** 
* Minimum Length 
* 
* @access public 
* @param string 
* @param value 
* @return bool 
*/ 
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; 
} 

は、Unicode修飾子を使用します。

// native CI alpha function: 
function alpha($str) 
{ 
    return (! preg_match("/^([a-z])+$/i", $str)) ? FALSE : TRUE; 
} 

// ready for unicode using u modifier in regex pattern 
function alpha($str) 
{ 
    return (! preg_match("/^([a-z])+$/iu", $str)) ? FALSE : TRUE; 
} 
+0

が、これは他のメガバイトの機能のためのケースですか? – John

+0

これらのほとんどのアプライアンスは存在しません。上記のようなstrlen(max_length、min_length、exact_length)関数、preg_match関数(alpha、alpha_numericなど)を使用する関数があります。これらはunicodeでは機能しませんあなたは簡単に 'u'修飾子を使ってそれらを偽造することができます - 私の編集した答えを確認してください –

+0

@dezcoこれは特にcodeigniterの問題ですか、それとも、stringを実行するためにutf8用に構築された機能? – John

0

いいえ、フォーム検証クラスを拡張して、独自の検証関数を使用することができます。