文字列が mb 文字列であることを確認するにはどうすればよいですか? strlen の代わりに mb_strlen を使用しますか?
4 に答える
文字列のエンコーディングと、それがマルチバイトかどうかを常に把握しておく必要があります。mb_strlen()
結局、信頼できる結果を得るには、文字列のエンコーディングを の 2 番目のパラメータとして渡す必要がありますね。
入力データのエンコーディングは、常に何らかの方法で定義されます。フォーム データを処理するときのページのエンコーディング。データベース データを処理するときのデータベース接続とテーブルのエンコーディング。等々。何がどのエンコーディングでどこにあるのかを常に把握できるようにフローを構築するのは、あなたの仕事です。
唯一の例外は、コンテンツのエンコーディングが適切に宣言されていない任意のサードパーティ データを扱っている場合です。mb-detect-encoding()
や同僚のようなスニッフィング機能を使用してもよいのは、そのときだけです。これらの関数は非常にエラーが発生しやすく、文字列がどのエンコーディングに含まれているかは経験に基づいた推測のみを提供し、信頼性の高い情報ではないことに注意してください。
いいえ、文字列は文字列です。複数のバイト文字が含まれているかどうかを確認する方法はありません。
mb_detect_encoding() のようなもので推測できますが、走行距離は文字セットとエンコーディングによって異なる場合があります。たとえば、UTF-8 には非常に明確なパターンがあり、非常に良い結果が得られます。しかし、GB2312 などの他のエンコーディングは検出が非常に困難です。
新しいプロトコルまたはシステムを設計している場合は、エンコード情報を保持することをお勧めします。
strlen と mb_strlen の結果を比較し、一致しない場合、文字列にはマルチバイト文字が含まれています。
そのために使用されないmb_check_encoding
、またはmb_detect_encoding
使用されるはずですか?