То, с чем вы сталкиваетесь, является результатом того, что данные записываются в одной кодировке и интерпретируются как другая. Вам нужно убедиться, что вы запрашиваете ввод в том же формате, в котором ожидали. Я рекомендую просто придерживаться UTF-8 весь путь, если только вам не нужно избегать многобайтовых символов, в этом случае Возможно, вы захотите взглянуть на форсирование ASCII.
Убедитесь, что вы говорите PHP для внутреннего использования UTF-8:
ini_set('default_charset', 'UTF-8');
И убедитесь, что вы говорите браузеру, чтобы он ожидал кодированный в UTF-8 текст, оба в заголовках ...
header("Content-Type:text/html; charset=UTF-8");
… и в ваших метатегах (html5 ниже)…
<meta charset="utf-8">
Установка этого параметра позволит браузеру отправлять вам содержимое в кодировке UTF-8 при отправке формы, а также будет интерпретировать результаты, которые вы отправляете обратно, как UTF-8.
Вы также должны убедиться, что хранилище вашей базы данных и кодировка соединения также находятся в UTF-8. Обычно, если это просто тупое хранилище данных (то есть оно не будет каким-либо образом манипулировать или интерпретировать данные), это не имеет значения, но лучше иметь все в порядке, чем столкнуться с проблемами позже.