Doctrineの文字列長チェックにハマる
2009年04月16日(木)09:31|天方
こんにちは。天方です。最近、Symfony1.2のDoctrineではまりました。
Doctrineでデータを登録していたのですが、
* 1 validator failed on name (length)
と出力されて登録ができていませんでした。
エラーの意味は、nameカラムの長さチェックが失敗しているというものだのですが、 設定も登録データの長さも適切なんです。 なんでだろうと思って、Doctrineの長さチェックのコードを見てみました。下記がそのコードです。
public static function getStringLength($string)
{
if (function_exists('iconv_strlen')) {
return iconv_strlen($string);
} else if (function_exists('mb_strlen')) {
return mb_strlen($string);
} else {
return strlen($string);
}
}
日本語については、mb_strlenを使っていると思ったら、iconv_strlenがある場合は そちらを使うようになっているのですね…。
今回はUTF-8を文字コードとして扱っているのですが、デフォルトではISO-8859-1が設定されているようなので、php.iniに
iconv.internal_encoding = UTF-8
を設定することで解決しました。
とりあえずiconv入れちゃえってphpビルドしていたばかりにハマりました・・・。