3

Zend Frameworkでは、Zend_Validate_StringLengthには、異なる文字セット間での変換に使用できるエンコーディングプロパティがあります(文字列上でiconv_set_encodingを使用します)。Zend_Validate_StringLengthエンコーディング?

StringLengthバリデータクラスのこの部分はなぜですか? UTF-8を強制するために、文字列長フィールドのチェックでこれを使用する必要がありますか?

答えて

3

PHPの文字列の長さは、文字列を保存するために取られたバイト数です。一部のエンコーディングでは、複数のバイト(2など)を使用して1文字を格納します。

したがって、いくつかの文字を複数のバイト(たとえば、Unicode UTF-8)で保存するエンコーディングを使用する場合は、このエンコーディングを使用して文字列の長さを適切に決定する必要があります。 デフォルトのエンコード設定を使用すると、結果が不正確になることがあります。

しかし、すべてのZendコンポーネントのデフォルトは、WebアプリケーションのデファクトスタンダードであるUTF-8だと思います。残念ながら、これはPHPのためのデフォルトのものではありません(まだ)。

+0

ZFはUTF-8で検証されません(少なくともZend_Validateは実行されません)。 'iconv_get_encoding()'が返すものがデフォルトになるようです。 (これはUTF-8とは別に設定されている可能性がありますが、これは 'Zend_Validate'とは関係ありません)。 – mjs

0

実際には、iconv_set_encodingを使用して、現在のサーバーでサポートされているかどうかをテストします($encoding)。実際の比較はiconv_strlen()で行われます。

私はあなたの2番目の質問を得ることができますか分かりません。文字列の長さを検証する必要がある場合は、このバリデータを使用する必要があります。