$_POST['message'], => [0] => %C3%AE%C3%BB%C3%B4%C3%B3
Вы зашифровали URL-адрес своего ввода. Суперглобальные переменные GET / POST / REQUEST уже позаботились о входных строках декодирования URL, где это необходимо, вам не нужно декодировать их вручную.
Посмотрите, что вызывает этот запрос (XMLHttpRequest?), И удалите лишний вызов encodeURIComponent()
. Например, если вы используете jQuery ajax()
и передаете POST-данные в качестве объекта, jQuery будет вызывать encodeURIComponent()
для вас, и вам не нужно делать это и самим.
urldecode($_POST['message']), => îûôó
Это UTF-8, неправильно истолкованный как кодовая страница Windows 1252 (западноевропейская, аналогично ISO-8859-1).
Скорее всего, вы успешно сохранили байты UTF-8 в свой файл журнала, но что бы вы ни читали в файле журнала, он не понимает, что он должен отображаться как UTF-8.
utf8_decode(urldecode($_POST['message'])), => îûôó
Это работает только потому, что символы, которые вы использовали для его проверки, также существуют в кодовой странице 1252. utf8_decode
неверно названо; на самом деле он преобразует последовательность байтов UTF-8 в последовательность байтов ISO-8859-1, которая будет представлять ту же строку. Обычно вы хотите работать в UTF-8, а не в ISO-8859-1, поэтому вам следует избегать utf8_decode.
русский язык => ??????? ????
Понятно: кириллические символы не существуют в кодовой странице 1252.
Предполагая, что вы отправляете свой вывод error_log в файл и пытаетесь прочитать файл, придерживайтесь простых байтов UTF-8 и читайте свои журналы в приличном текстовом редакторе, который позволяет вам видеть и выбирать кодировку; в идеале современный, по умолчанию UTF-8. В качестве альтернативы вы можете убедить Блокнот прочитать файл Unicode, сохранив его как UTF-16 или UTF-8 и включив метку порядка байтов в начале. (Включение спецификации в файл UTF-8 является своего рода неправильным, но многие инструменты в мире Microsoft делают это.)