У меня возникли проблемы с моими данными $ _POST/$ _ REQUEST, они все еще выглядят utf8_encoded.Данные UTF-8, полученные php, не декодируются
Я посылаю обычные Аякса почтовые запросы, в этих условиях:
oXhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
- JS-файл, сохраненный под формате utf8-nobom
- мета-теги в HTML настройки
<header>
тегов - PHP файлы сохраняется также в формате utf-8-nobom
encodeURIComponent
используется, но я пробовал без него и дает тот же результат
Хорошо, все в порядке: база данных также находится в utf8 и получает ее таким образом, страницы показывают хорошо.
Но когда я получаю символ «º», например (через $_REQUEST
или $_POST
), его двоичный represention является 11000010 10111010
, в то время как «º» зашиты в PHP (utf8 ...) бинарное представление только 10111010
.
wtf? Я просто не знаю, хорошо это или нет ... например, если я использую «# º #» в качестве разделителя функции php explode
, он не будет обнаружен, и на самом деле это проблема, которая ведет я здесь.
Любая помощь будет, как обычно, высоко оценена, большое вам спасибо за ваше время. Лучшие rgds.
EDIT1: проверка против mb_check_encoding
if (mb_check_encoding($_REQUEST[$i], 'UTF-8')) {
raise("$_REQUEST is encoded properly in utf8 at index " . $i);
} else {
raise(false);
}
Кодирование подтвердилось, у меня было сообщение воскресил должным образом.
Что происходит, когда вы проверяете ввод с помощью 'mb_check_encoding()': http://www.php.net/manual/en/function.mb-check-encoding.php –
однобайтных символов utf-8 не имеют бит 7 (восемь бит), поэтому '10111010' не является utf-8 – Musa
@PhpMyCoder подтвержден, проверьте правильность – Sebas