何らかの理由Â
で、フォームのテキスト フィールドに £ を入力すると、£76756687 という奇妙な文字が表示されます。
2 に答える
ご想像のとおり、これは文字エンコードの問題です。ページは UTF-8 の文字セットを使用するように設定されていますか? (実際には、このエンコーディングを間違えることはありません。) また、途中でシャープ記号をエンティティ エンコードすることもできます ( £
) 。
文字セットの例 (フォーム ページと HTML 電子メールの両方) として、次を使用できます。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
とはいえ、ユーザーが通貨記号を入力しなければならない正当な理由はありますか? 静的なテキスト アイテムまたはテキスト フィールドの左側のドロップダウンのいずれかにする方がよいでしょうか? (私がお尻を話しているのに、自由形式のテキストエリアまたは要約を使用している場合は、遠慮なく無視してください。)
文字エンコーディングとして UTF-8 を使用している可能性がありますが、出力を正しく宣言していません。£
文字 (U+00A3) は 0xC2A3 で UTF-8 でエンコードされているためです。ISO 8859-1 で解釈するÂ
と、そのバイト シーケンスは 2 つの文字を表します。£
したがって、文字エンコーディングを正しく指定するだけです。header
PHP では、この関数を使用して、次のようにContent-Typeヘッダー フィールドに適切な値を設定できます。
header('Content-Type: text/html;charset=utf-8');
ただし、出力の前にこの関数を呼び出すようにしてください。それ以外の場合、HTTP ヘッダーは既に送信されており、変更できません。