2011-12-28 33 views
0

POSTとして送信された値を内部文字列と比較しようとしています。両方ともutf8でエンコードされています。これは、コードPHPでutf8でエンコードされた文字列を比較する

echo $_POST["province"] . "\n"; 
setlocale(LC_COLLATE, "fr_CA"); 
echo strcoll($_POST["province"], "Québec"); 

このコードは次のようにエコー表示されます。文字列の一致ではなく、-38場合

Québec 
-38 

たstrcollは0を返す必要があります。つまり、比較が失敗します。人間の読者と同一の2つのutf8文字列を比較するにはどうすればよいですか?私はノーマライザを試してみました:一般的な "=="演算子を正規化しようとしましたが、マルチバイトのPHP拡張モジュールを見ました。

+0

'strcmp()'または 'strcasecmp()'を試してみませんか?または、ハッシュを比較するか? – Corubba

答えて

4
  1. PHPファイルをUTF-8として保存することを確認してください。本当に重要です。
  2. HTMLフォームが実際にUTF-8データをサーバーに送信していることを確認してください。
  3. PHPがUTF-8を内部エンコーディングとして使用していない場合、チェックしている文字列が同じエンコーディングになっていることを確認するには、utf8_decodeを使用する必要があります。
+0

ありがとうございます。ファイルがラテンのエンコーディングで保存されていたので、それは問題ではありませんでした。 –

関連する問題