Forum Webscript.Ru
Общие => Веб-технологии => Тема начата: Sense от 19 Февраля 2003, 10:53:20
-
Проблема такая:
Сервер провайдера отдаёт страницы разным клиентам в разной кодировке (кму и как именно отдаёт выяснить не удалось). Врезультате по POST приходят данные то в КОИ, то в ВИН кодировках.
Как определить в какой кодировке пришли данные (на сервере крутятся скрипты, конкретно PHP, но по-моему собака зарыта не в PHP, поэтому пишу в этот раздел)
Вариант: добавить в форму INPUT type=hidden name=test value=АБВГД не проходит - возвращаются не буквы, а коды символов :(
Вариант: попросить пользователя набрать эти АБВГД тоже не прельщает :(
Есть ли способ распознать кодировку по каким-либо заголовкам и пр...?
Если нет - Можно ли как-то "интеллектуально" это выяснить по самим полученным данным, при условии, что данные могут быть очень короткими (имя, фамилия)?
-
Про коды - можешь показать какие именно возвращаются?
Посмотри в переменные окружения - если это РуускийАпаче он , вроде, сообщает кодировку где-то в переменных (see phpinfo())
Кроме него эта информация никак нигде не прописана (кстати может там unicode?)
По поводу "попросиь usera" - можешь загонять в какоето поле размерами 1x1 px строку JavaScript-ом.
Хотя это извращение...
Определять можно по частоте символов:
tr -s "иоуэяИОУЭЯ" "#" | tr -s "ХНСЩЪйпхьс" "@"
(это в кодировке KOI набрать)
т.е посчитать каких символов больше...
но результат не 100% конечно же.
Хотя - у тебя же куча полей, так что нормально (возмешь самое вероятное).
А если это login - просто можешь 3 попытки делать в разных кодировках - есть user или нет
-
Действительно, у Апача есть переменная CHARSET, которая содержит кодировку В КОТОРОЙ документ БУДЕТ ОТДАН. Конечно, если исключить злой умысел пользователя (когда он ручками кодировку неправильно выставляет и форму заполняет), то и предыдущий документ этому пользователю был отдан в той же кодировке, а значит и данные пришли в ней.
Спасибо!
По частоте символов на более-менее больших текстах работает. На коротких (на отдельных словах) возникают ошибки. Зато работает железно, даже если из Ворда в форму копируешь. (Ворд вообще инструмент железобетонный - ему всё пофиг - он только в ВИН кодировке Paste делать умеет).
Тоже спасибо!
Ещё нашёл:
Можно в .htaccess прописать
CharsetAgent koi8-r AIR_Mosaic IWENG/1 MSIE WinMosaic (Windows (WinNT; (Win16; (Win95; (16-bit)
может и не очень это "вежливо", зато апач после этого считает, что кои - любимая кодировка майкрософта ;)
-
Тут, оказывается, есть ещё одно место, где собака порылась:
Если MSIE выдать страницу с формой в кодировке koi8-r и затем ввести
текст, содержащий символы, которых нет в кодировке koi8-r, например,
параграф, кавычки-ёлочки, многоточие и прочие полезные типографские
штучки, то MSIE отправит форму в кодировке windows-1251. Самое же
неприятное заключается в том, что он никак не сообщает об этом.