ユーザーが提供した文字列をMongoDbに保存しようとしていますが、保存して正規化する前にこれを行います:
ucwords(mb_strtolower(trim($name)))
しかし、これにより、MongoDb は "æøå" のような文字で MongoException をスローします。
「mb_」はUTF-8で機能を正常に動作させると思いましたか? プレーンな strtolower を使用すると、問題が解決します。
ありがとう
ユーザーが提供した文字列をMongoDbに保存しようとしていますが、保存して正規化する前にこれを行います:
ucwords(mb_strtolower(trim($name)))
しかし、これにより、MongoDb は "æøå" のような文字で MongoException をスローします。
「mb_」はUTF-8で機能を正常に動作させると思いましたか? プレーンな strtolower を使用すると、問題が解決します。
ありがとう
PHP 5.4 を使用している場合、デフォルトの文字セットが ISO-8859-1 から UTF-8 に変更されています。
$name からのエンコーディングが ISO-8859-1 または UTF-8 でない限り、strtolower は完璧な仕事をしてくれるはずです。
MongoDB は常に UTF-8 文字列を想定しています。
@JvdBergが言うように、それはPHPに依存しますが、PHP 5.4より前のデフォルトはUTF-8ではないため、iconv
またはutf8_encode
文字列を「エンコード」する必要があります。古い PHP を使用している可能性が高く、文字列は実際には ISO エンコードされています。
mb_
関数は、文字列をエンコードしない変換を行うときにマルチバイト文字を考慮に入れるだけです。