Клиентские браузеры отправляют заголовок HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.3
. Я только обслуживаю веб-страницы как utf8 с правильным заголовком, но браузеры отправляют данные из форм, закодированных в кодировке ISO-8859-1. Мой вопрос в том, будет ли браузер всегда выбирать кодировки в порядке его заголовка ACCEPT_CHARSET, чтобы я мог надежно написать промежуточное программное обеспечение, которое будет декодировать любые опубликованные данные с первой записью, в этом случае ISO-8859-1, и закодировать ее как utf8.Браузер кодирует порядок приоритета
UPDATE:
Я обновил форму тег с accept-charset="utf-8"
и я до сих пор видеть не-юникод появляться. Возможно ли, что пользователь скопирует/вставляет свой пароль из другого места (lastpass, excel file), может вводить символы, отличные от юникода?
Так что, я думаю, у браузера есть ошибка. Он определенно не публикует данные как UTF8. Я добавил accept-charset, и я получаю согласованные результаты, если я просто использую HTTP_ACCEPT_CHARSET браузера в качестве указателя в случае ошибок. – Endophage
Если это происходит в нескольких браузерах, возможно, есть другое объяснение. У вас есть или вы можете создать URL общедоступной страницы, демонстрирующий проблему? Я не могу его восстановить. Браузеры, как правило, отправляют заголовки Accept-Charset, как вы упомянули, хотя сама страница и передача данных формы являются UTF-8. Заголовок зависит от их конфигурации, а не от страницы. Я подозреваю, что может быть какой-то программный компонент (серверный), который выполняет преобразование кода до того, как данные достигнут вашего кода. –
Я запускаюсь на Mac, и проблема, похоже, связана с тем, что пользователи Windows вводят символы, которые впоследствии кодируются в расширенных кодировках ascii, например «E» с острым акцентом, который кодируется как \ xC9, какие ошибки, когда он затем слепо обрабатывается как unicode в сервер. – Endophage