0

ラテン文字「Å」を持つ国の配列があります。

$country["af"] = "Afghanistan";
$country["ax"] = "Åland Islands";
$country["al"] = "Albania";

この配列をループして国名の最初の文字の比較を実行しているときに、ラテン文字を一致させることができません。

foreach($country as $cc => $name)
{
 if($name[0] == "Å")
 {
  echo "matched";
 }
 else
 {
  echo $name[0];
 }
}

私が得た結果は次のとおりです。

ラテン文字 Å が � になったのはなぜですか? また、適切な比較を実行してラテン文字 Å を出力するにはどうすればよいですか?

注: http ヘッダーと html ドキュメントは既に UTF-8 形式として指定されています。

注 2 を追加:$nameの代わりに単にエコーすると$name[0]、オーランド諸島の Å を取得できます。を使用substr($name, 0, 1)すると と同じ効果が得られ$name[0]、これにより � が得られます。

4

4 に答える 4

4

スクリプトをこれに変更します。Unicode エンコーディング ワードは、通常の文字列関数では分解できません。マルチバイト関数を使用する必要があります。

foreach($country as $cc => $name)
{
     if(mb_substr($name,0,1,"UTF-8") == "Å")
     {
      echo "matched";
     }
     else
     {
      echo mb_substr($name,0,1,"UTF-8");
     }
}
于 2013-05-20T10:49:57.247 に答える
2

問題は、プログラムによって異なる文字を表現する方法が異なることです。これは、文字エンコーディングと呼ばれます。ブラウザ、サーバー、および PHP コードは現在、使用しているエンコーディングについて混乱しています。これは、UTF-8文字とANSIコードが混在しているためです。

エンコーディングについて詳しくは、http: //vlaurie.com/computers2/Articles/characters.htmをご覧ください。

UTF-8 PHP サイトを作成するときは必ず 3 つのことを行います。次の 3 つのことで問題を解決できます。

PHP UTF-8 ヘッダーを追加する

これをコードの先頭に追加します。

<?php
header('Content-Type: text/html; charset=utf-8'); 
...

これにより、ANSI ではなく UTF-8 を使用してこのドキュメントを解析するように他のサーバーとブラウザに指示されると思います。詳細については、こちらをご覧ください: PHP を使用して HTTP ヘッダーを UTF-8 に設定する

HTML UTF-8 メタ タグを追加する

返される HTML の先頭に次のコードを追加します。

<!doctype html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
...

これにより、ブラウザーは文字を (ANSI ではなく) UTF-8 で読み取るようになります。詳細については、こちらをご覧ください: PHP を使用して HTTP ヘッダーを UTF-8 に設定する

PHP ファイルを BOM なしの UTF-8 として保存する

デフォルトでは、通常、ファイルはUTF-8 Å` 文字を適切にANSIエンコードして保存されます。. If you want to work with international characters, then you need to save them inencoding. This will let you work with the

テキスト エディターとして Notepad++ を使用している場合は、[エンコード] メニューでドキュメントのエンコードを設定できます。に設定しEncode in UTF-8 without BOMます。

ガッチャ

UTF-8 without BOMと同じではありませんUTF-8。多くの場合、UTF-8 ファイルには、そのファイルが UTF-8 ファイルであることを示す 3 バイトのデータが先頭に追加されます。これはByte Order Mark(BOM) と呼ばれます。BOM の詳細については、http ://www.arclab.com/products/amlc/utf-8-php-cannot-modify-header-information.html をご覧ください。

とにかく、ほとんどのプログラムはファイルが UTF-8 であることを認識できるため、BOM は冗長です。BOM なしで保存しないと、おそらく次のようなエラー メッセージが表示されます。

Warning: Cannot modify header information – headers already sent

このエラー メッセージが表示された場合は、BOM に問題がある可能性があります。

于 2012-09-26T15:12:02.460 に答える
1

クエスチョン マークは、ビューア (ブラウザ) が現在の文字セットでサポートされていない文字を表示しようとしているためです。$name[0] で最初の文字にアクセスするときにこれが発生する理由はわかりません。

ここの投稿に基づく: PHP: 特定のボスニア文字を非ボスニア文字に変換する (utf8 標準文字)

私は次のことを試しました:

$result = iconv("UTF-8", "ASCII//TRANSLIT", $test);

$result には Aland Islands が含まれるようになり、特殊文字は通常のバージョンに変換されます。

$result[0] には A が含まれているはずです。

于 2012-09-26T14:08:59.797 に答える
0

ファイル(格納コード)の文字コードを設定して出力してください

于 2012-09-26T14:11:26.647 に答える