Вы сталкиваетесь с множеством разных проблем одновременно, давайте начнем с самой простой.
Задача 1) Вы говорите, что echo $_POST['field'];
отобразит ее правильно?Что вы имеете в виду под «дисплеем»?Оно может корректно отображаться в двух случаях:
- , либо поле имеет формат UTF-8, и ваша страница была объявлена как UTF-8, а браузер отображает ее как UTF-8 или,
- поле указано на латинице-1, и браузер решил (с помощью эвристики автоопределения), что ваша страница на латинице-1.
Итак, факт, что echo $_POST['field'];
правильно ничего вам не говорит.
Проблема 2) Вы используете
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
header('Content-Type:text/html; charset=UTF-8');
Это код PHP?Если это так, это будет ошибкой, потому что заголовок должен быть установлен перед отправкой любого байта.Если вы сделаете это, вы не установите заголовок Content-Type
, а PHP должен сгенерировать предупреждение.
Проблема 3) Вы используете
<form action="whatever.php" accept-charset="UTF-8">
Некоторые браузеры (в основном IE) игнорируют accept-charset
, если они могут привести данные к отправке в ASCII или ISO Latin-1.Таким образом, данные будут в формате UTF-8 и объявлены как ISO Latin-1 или ISO Latin-1 и отправлены как ISO Latin-1 (но этот второй случай не ваш случай).
Посмотрите на https://stackoverflow.com/a/8547004/449288 чтобы увидеть, как решить эту проблему.
Задача 4) Какие строки вы сравниваете?Например, если у вас есть
$city = "München"
$_POST['city'] == $city
Результат этого кода будет зависеть от кодировки файла PHP.Если файл закодирован в ISO Latin-1 и $_POST
правильно содержит данные UTF-8, ==
будет сравнивать разные байты и вернет false.