[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: определение кодировки входящих данных
redreem
встала задача определять кодировку данных в GET и POST, а вернее решать: win-1251 это или utf-8. прогуглил тему - народ оперирует какими-то статистическими методами, дающими вероятность. методы какие-то громоздки и многострочные. стал копать сам:
1. в utf-8 латинский алфавит и всякие символы лежат в 1 байте.
2. русский алфавит кодируется 2-мя байтами, причем первый 208 или 209. в символах 208 и 209 дают символы PI, но для написаных рукой эти кода 80 и 73, значит это не символы латинского алфавита.
3. итог: если есть во входящих данных 208 или 209 - значит это utf, иначе win-1251.
другие кодировки мне не нужны в принципе для данной задачи.

в чем я не прав?

корни задачи такие: сайт в win-1251. некоторые данные отправляются через jQuery, т.е. идут в utf. мне нужно понимать: либо было отправлено стандартным action например или ссылка содержала код именно "прописаный в html", либо это данные через jQuery. если кто знает как заставить jQuery отправлять в win-1251 - то проблемы вобще не будет.

спасибо.




Спустя 12 минут, 56 секунд (9.09.2011 - 20:12) YVSIK написал(а):
ПОКА ПОСЛЕЖУ что те ответят но ))
а про себя подумал ТАК))причем тут кодировка и вообще для чего?
кодировка нужна для вывода на страницу, ещё вернее сказать
если файл в одной кодировке то как он передаст какую-то часть в другой,?? собстно?
по моему так не бывает
если на сайте есть ожна кодировка то как при помощи чего-то он может
передавать по другому, да и ваще как
Цитата
некоторые данные отправляются через jQueуr

как ты себе это представляешь?
ведь jQuerу это просто свод правил и всего, так и зовется БИБЛИОТЕКА

Спустя 2 минуты, 5 секунд (9.09.2011 - 20:14) Winston написал(а):
Насчет определения кодировок попробуй mb_detect_encoding()

Спустя 7 минут, 40 секунд (9.09.2011 - 20:22) redreem написал(а):
YVSIK, да все ajax методы в jQuery отправляют данные в utf. хоть весь сайт у меня на win-1251.

Winston, исходя из этого, использование mb_detect_encoding() превращается в те еще танцы с бубнами.

Спустя 47 минут, 45 секунд (9.09.2011 - 21:10) KonstantinK написал(а):
Цитата
да все ajax методы в jQuery отправляют данные в utf. хоть весь сайт у меня на win-1251

Ну так из этого и исходите если данные получены к примеру из формы то они прийдут в win-1251 а если через ajax по соответственно в utf-8 . А так точно определить в какой кодировке данные средствами PHP трудно вот http://habrahabr.ru/blogs/php/107945/ была статья

Спустя 8 минут, 9 секунд (9.09.2011 - 21:18) redreem написал(а):
KonstantinK, сейчас так и поступаю. вопрос собственно в правоте моих рассуждений в топе. а копаю на будущее. вдруг возникнет ситуация, когда я не буду знать наверняка чем отправлено.

Спустя 15 минут, 15 секунд (9.09.2011 - 21:33) YVSIK написал(а):
redreem про это ничего не знаю , но кодировка определяется
ешё раз для вывода удобочитаемом виде на странице
вот передается она в своем коде кажется это ANSI и вот jQuery
по момйу все разно какая; он что; отправляет данные серверу?
или ещё чемунить?? он выполняет команды и выдает их браузеру, и никак
не иначе ))
а кодировку определяет сам браузер) и если они не соответсвую одному значению выходят КРАКОЗЯБРЫ )) как это говориться ))
вот так примерно ),, это что терь jQuery не может работать с винвской кодироквой вот примерный мой обсурд понимания
вот и уточняю на вскиЙ)))..........

Спустя 6 минут, 58 секунд (9.09.2011 - 21:40) redreem написал(а):
YVSIK, я так понимаю просто jQuery принудительно кодирует в utf вот и все.

Спустя 1 час, 12 минут, 54 секунды (9.09.2011 - 22:53) Zerstoren написал(а):
Посоветовал бы chardet - но он под Пайтоном.

А так используйте рекомендацию Winston mb_detect_encoding()

Спустя 2 минуты, 12 секунд (9.09.2011 - 22:55) redreem написал(а):
блин, а вы мне скажите в чем МОИ рассуждения ошибочны??? какую языковую конструкцию я профукаю если буду проверять только 208 и 209???

Спустя 21 минута, 5 секунд (9.09.2011 - 23:16) Zerstoren написал(а):
Цитата (redreem @ 9.09.2011 - 19:55)
блин, а вы мне скажите в чем МОИ рассуждения ошибочны??? какую языковую конструкцию я профукаю если буду проверять только 208 и 209???

пытаться надеяться что в сообщении есть 208 и 209 байт - наивно.
Ну отправлю я вам 2 символа, а не более 65. Все нету этих байтов.

Не морочьте себе мозг - либо переведите сайт в utf8 либо используйте функцию которую вспоминали выше.

Ajax отправляет все данные в utf по причине его простой символьной кодировки.

Спустя 10 часов, 24 минуты, 37 секунд (10.09.2011 - 09:41) redreem написал(а):
народ, вы отвечаете на вопрос, который я не задавал. это тоже самое что искать там где светло. где логика??? а еще программисты...

Спустя 16 минут, 49 секунд (10.09.2011 - 09:58) Игорь_Vasinsky написал(а):
Цитата
сли кто знает как заставить jQuery отправлять в win-1251 - то проблемы вобще не будет.


а зачем JQ чего то заставлять? принимаешь данные и меняешь принудител но кодировку через iconv();, не важно юникод это или анси - кодируешь в анси.

Спустя 32 минуты, 4 секунды (10.09.2011 - 10:30) redreem написал(а):
Игорь_Vasinsky, если это будут русские символы в win-1251, то получится каша на выходе.

опишу задачу еще раз кодом:
1. есть входные данные, которые могут быть либо в utf-8 либо в win-1251.
2. на выходы надо получить исключительно win-1251. прав ли я, используя такое решение? (исходя из логики, описаной в топе темы):


define ('CHAR_208', chr(208));
define ('CHAR_209', chr(209));

function setWin1251($data) {
if (strpbrk($data,CHAR_208.CHAR_209)!='') return iconv("utf-8","cp1251",$data); else return $data;
}

$var=setWin1251($_GET['var']);

Спустя 1 минута, 46 секунд (10.09.2011 - 10:32) Игорь_Vasinsky написал(а):
да. я про это, не важно что приходит - кодируй в анси.
а чё так сложно?

function setWin1251($data) {
iconv("utf-8","windows1251",$data);
return $data;
}

Спустя 26 минут, 49 секунд (10.09.2011 - 10:58) redreem написал(а):
код:
header("Content-type: text/html; charset=windows-1251");
echo 'абв-'.iconv("utf-8","cp1251",'абв').'<br>';
echo 'abc-'.iconv("utf-8","cp1251",'abc').'<br>';
echo 'all-'.iconv("utf-8","cp1251",'абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯabcdefghijklmnopqrstuvwxyz').'<br>';


выдает:

абв-
abc-abc
all-


а вообще - беру таймаут. ступил поначалу, выяснилось, что 208 и 209 - это русские РС. непонимаю откуда я взял поначалу что это не алфавитные символы. щас буду прокапывать заного. отпишусь.

Спустя 1 час, 9 минут, 7 секунд (10.09.2011 - 12:08) redreem написал(а):
задача снимается.
нашел такое: preg_match('#.#u', $var) - определяет utf не utf.

Спустя 1 час, 3 минуты, 16 секунд (10.09.2011 - 13:11) Игорь_Vasinsky написал(а):
а если модификатор i добавить - то можешь и на регистр внимание не обращать.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.