Автор Тема: Как определить кодировку пришедших по POST данных?  (Прочитано 2839 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Sense

  • Гость
Проблема такая:
Сервер провайдера отдаёт страницы разным клиентам в разной кодировке (кму и как именно отдаёт выяснить не удалось). Врезультате по POST приходят данные то в КОИ, то в ВИН кодировках.
Как определить в какой кодировке пришли данные (на сервере крутятся скрипты, конкретно PHP, но по-моему собака зарыта не в PHP, поэтому пишу в этот раздел)
Вариант: добавить в форму INPUT type=hidden name=test value=АБВГД не проходит - возвращаются не буквы, а коды символов :(
Вариант: попросить пользователя набрать эти АБВГД тоже не прельщает :(

Есть ли способ распознать кодировку по каким-либо заголовкам и пр...?
Если нет - Можно ли как-то "интеллектуально" это выяснить по самим полученным данным, при условии, что данные могут быть очень короткими (имя, фамилия)?

Оффлайн Oak

  • Дерево
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1481
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Про коды - можешь показать какие именно возвращаются?

Посмотри в переменные окружения - если это РуускийАпаче он , вроде, сообщает кодировку где-то в переменных (see phpinfo())

Кроме него эта информация никак нигде не прописана (кстати может там unicode?)

По поводу "попросиь usera" - можешь загонять в какоето поле размерами 1x1 px строку JavaScript-ом.
Хотя это извращение...

Определять можно по частоте символов:

tr -s "иоуэяИОУЭЯ" "#" | tr -s "ХНСЩЪйпхьс" "@"
(это в кодировке KOI набрать)


т.е посчитать каких символов больше...
но результат не 100% конечно же.
Хотя - у тебя же куча полей, так что нормально (возмешь самое вероятное).

А если это login - просто можешь 3 попытки делать в разных кодировках - есть user или нет
[основной броузер - SeaMonkey] Netscape Communicator 4 - is the best :) // see sources

Оффлайн sense

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kapitalnt.krsn.ru:8080/
Действительно, у Апача есть переменная CHARSET, которая содержит кодировку В КОТОРОЙ документ БУДЕТ ОТДАН. Конечно, если исключить злой умысел пользователя (когда он ручками кодировку неправильно выставляет и форму заполняет), то и предыдущий документ этому пользователю был отдан в той же кодировке, а значит и данные пришли в ней.
Спасибо!

По частоте символов на более-менее больших текстах работает. На коротких (на отдельных словах) возникают ошибки. Зато работает железно, даже если из Ворда в форму копируешь. (Ворд вообще инструмент железобетонный - ему всё пофиг - он только в ВИН кодировке Paste делать умеет).
Тоже спасибо!

Ещё нашёл:
Можно в .htaccess прописать
CharsetAgent koi8-r AIR_Mosaic IWENG/1 MSIE WinMosaic (Windows (WinNT; (Win16; (Win95; (16-bit)
может и не очень это "вежливо", зато апач после этого считает, что кои - любимая кодировка майкрософта ;)
За сим откланяюсь,
ваш Дед Мороз

Оффлайн sense

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kapitalnt.krsn.ru:8080/
Тут, оказывается, есть ещё одно место, где собака порылась:

  Если MSIE выдать страницу с формой в кодировке koi8-r и затем ввести
  текст, содержащий символы, которых нет в кодировке koi8-r, например,
  параграф, кавычки-ёлочки, многоточие и прочие полезные типографские
  штучки, то MSIE отправит форму в кодировке windows-1251. Самое же
  неприятное заключается в том, что он никак не сообщает об этом.
За сим откланяюсь,
ваш Дед Мороз

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28