Zend Frameworkでは、Zend_Validate_StringLength
には、異なる文字セット間での変換に使用できるエンコーディングプロパティがあります(文字列上でiconv_set_encoding
を使用します)。Zend_Validate_StringLengthエンコーディング?
StringLength
バリデータクラスのこの部分はなぜですか? UTF-8を強制するために、文字列長フィールドのチェックでこれを使用する必要がありますか?
Zend Frameworkでは、Zend_Validate_StringLength
には、異なる文字セット間での変換に使用できるエンコーディングプロパティがあります(文字列上でiconv_set_encoding
を使用します)。Zend_Validate_StringLengthエンコーディング?
StringLength
バリデータクラスのこの部分はなぜですか? UTF-8を強制するために、文字列長フィールドのチェックでこれを使用する必要がありますか?
PHPの文字列の長さは、文字列を保存するために取られたバイト数です。一部のエンコーディングでは、複数のバイト(2など)を使用して1文字を格納します。
したがって、いくつかの文字を複数のバイト(たとえば、Unicode UTF-8)で保存するエンコーディングを使用する場合は、このエンコーディングを使用して文字列の長さを適切に決定する必要があります。 デフォルトのエンコード設定を使用すると、結果が不正確になることがあります。
しかし、すべてのZendコンポーネントのデフォルトは、WebアプリケーションのデファクトスタンダードであるUTF-8だと思います。残念ながら、これはPHPのためのデフォルトのものではありません(まだ)。
実際には、iconv_set_encoding
を使用して、現在のサーバーでサポートされているかどうかをテストします($encoding
)。実際の比較はiconv_strlen()
で行われます。
私はあなたの2番目の質問を得ることができますか分かりません。文字列の長さを検証する必要がある場合は、このバリデータを使用する必要があります。
ZFはUTF-8で検証されません(少なくともZend_Validateは実行されません)。 'iconv_get_encoding()'が返すものがデフォルトになるようです。 (これはUTF-8とは別に設定されている可能性がありますが、これは 'Zend_Validate'とは関係ありません)。 – mjs