Load возвращает данные в блок, но кодировка не та. указал PHP: <?php header("content: text/html"); header("Accept-Charset: windows-1251"); ?> но всеравно каракули в карзине смотреть тут http://zamanpharm.kz/dub/templates/bt_okto/2!!!.php
ajax и windows-1251 это геморой, начиная от функции encodeURIComponent в javascript и заканчивая json_decode / encode внутри php, которая с windows-1251 не работает так что прочитайте статью и впишитесь в общество ценителей UTF8
общество ценителей UTF8 - это такое же общество ценителей мыть с мылом. вроде бы помоешь - и всё чисто. но моешь голову мылом месяц, а потом бац! а почему это у меня волосы пересушены?..
titch что вы этим хотели сказать? что кодировка utf8 не универсальна? и в каких то задачах они дает сбои так же как и windows1251 при использовании ajax? относительно ajax скажу точно. если не использовать utf8, то вас ждут непредвиденные трудности. я имеено изза ajax перешел на кодировку utf8. До этого пользовался windows1251, и даже создал пару костылей которые решали проблему ajax->windows1251 однако когда увидел что ajax может работать без костылей на кодировке utf8 то пришлось признать, что utf8 это стандарт для сайтов.
затем, что там есть метод, который проверяет, кодирована ли строка в utf8. если нет, то принудительно кодируем в utf8. PROFIT! кодировать можно той же библиотекой, это логично
омг. а там нет метода, чтобы проверить, не забыл ли голову дома? тем, кому нужен тот метод, наверняка понадобится и этот.
PHP: <? /** * Returns true if data is valid UTF-8 and false otherwise. * Для значений null, integer, float, boolean возвращает TRUE. * * Массивы обходятся рекурсивно, если в хотябы одном элементе массива * его значение не в кодировке UTF-8, возвращается FALSE. * * @link [url=http://www.w3.org/International/questions/qa-forms-utf-8.html]http://www.w3.org/International/questio ... utf-8.html[/url] * @link [url=http://ru3.php.net/mb_detect_encoding]http://ru3.php.net/mb_detect_encoding[/url] * @link [url=http://webtest.philigon.ru/articles/utf8/]http://webtest.philigon.ru/articles/utf8/[/url] * @link [url=http://unicode.coeurlumiere.com/]http://unicode.coeurlumiere.com/[/url] * @param array|scalar|null $data * @param bool $is_strict строгая проверка диапазона ASCII? * @return bool */ public static function is_utf8($data, $is_strict = true); зря стебешься) это против барабах. если ты не можешь воткнуть, в каком формате передаются параметры get к примеру. разные праузеры по разному отдают. я как раз думал по этому поводу писать статью на хабру
titch я как раз думал по этому поводу писать статью на хабру Давай. А я как раз познакомлю вас с УТФ Джо. *на сцену выходит приятный мужчина в костюме:* - Добрый день. Вы наверное обо мне слышали. Разрешите представиться: я - УТФ Джо. Я работаю с текстом только в кодировке UTF8. Спасибо за внимание. Досвидания! До скорых встреч! *мужчина ловко разворачивается на каблучке и исчезает за занавесом*
для эксперимента попробуйте скопировать строку в разные браузеры и набрать её же руками в запрос: http://example.com/?язык=русский&раздел=новости только хром, на сколько я помню, сумел корректно отработать в обоих случаях. кто-то из браузеров отдает и в одном и втором случае в нативной кодировке системы (и это хорошо, если UTF-8), а есть очень запущенные случаи, когда копипаста отдаётся в одной кодировке, а набранный с клавиатуры запрос - в другой. допишу статью - могу сделать репост линки сюда на форум. думаю, что завтра этим и займусь зы: форумный парсер даже зохавать такое не смог. когда завернул в тоже отказался это есть
вообщем нужна функция которая бы опредяла что это utf8/windows1251 и конвертировала ее в кодировку windows1251/utf8 вне зависимости от того установлены расширения mb string и iconv в php и как titch сказал ее уже реализовали. я тут провел некоторые тесты. решением проблемы jquery->ajax->windows1251 является преобразование на стороне сервера принимаемых ajax запросов в кодировку из utf8 в кодировку windows1251 поскольку encodeURIComponent кодирует все что она получает в кодировку стандарта UTF ЭТо и понятно. все GET параметры находящиеся в URL должны быть в кодировке UTF . Унификация и стандартизация прежде всего.
PHP: function Encode ( $str, $type ) { // $type: 'w' - encodes from UTF to win 'u' - encodes from win to UTF static $conv=''; if (!is_array ( $conv )){ $conv=array (); for ( $x=128; $x <=143; $x++ ){ $conv['utf'][]=chr(209).chr($x); $conv['win'][]=chr($x+112); } for ( $x=144; $x <=191; $x++ ){ $conv['utf'][]=chr(208).chr($x); $conv['win'][]=chr($x+48); } $conv['utf'][]=chr(208).chr(129); $conv['win'][]=chr(168); $conv['utf'][]=chr(209).chr(145); $conv['win'][]=chr(184); } if ( $type=='w' ) return str_replace ( $conv['utf'], $conv['win'], $str ); elseif ( $type=='u' ) return str_replace ( $conv['win'], $conv['utf'], $str ); else return $str; } рабочий вариант от сюда http://forum.woweb.ru/topic34400.html
чета оно в windows1251 кодирует а обратно косяки одни. PHP: <?php #utf8 document print Encode (Encode ('Привет мир', 'w'), 'u');
вот велосипед: PHP: <?php #windows 1251 document function Encode($str, $code) { # $code = 'u' - win to utf. $code = 'w' - utf to win $uc = array( 128 => chr(208).chr(130), 129 => chr(208).chr(131), 130 => chr(226).chr(128).chr(154), 131 => chr(209).chr(147), 132 => chr(226).chr(128).chr(158), 133 => chr(226).chr(128).chr(166), 134 => chr(226).chr(128).chr(160), 135 => chr(226).chr(128).chr(161), 136 => chr(226).chr(130).chr(172), 137 => chr(226).chr(128).chr(176), 138 => chr(208).chr(137), 139 => chr(226).chr(128).chr(185), 140 => chr(208).chr(138), 141 => chr(208).chr(140), 142 => chr(208).chr(139), 143 => chr(208).chr(143), 144 => chr(209).chr(146), 145 => chr(226).chr(128).chr(152), 146 => chr(226).chr(128).chr(153), 147 => chr(226).chr(128).chr(156), 148 => chr(226).chr(128).chr(157), 149 => chr(226).chr(128).chr(162), 150 => chr(226).chr(128).chr(147), 151 => chr(226).chr(128).chr(148), //152 null 153 => chr(226).chr(132).chr(162), 154 => chr(209).chr(153), 155 => chr(226).chr(128).chr(186), 156 => chr(209).chr(154), 157 => chr(209).chr(156), 158 => chr(209).chr(155), 159 => chr(209).chr(159), 160 => chr(194).chr(160), 161 => chr(208).chr(142), 162 => chr(209).chr(158), 163 => chr(208).chr(136), 164 => chr(194).chr(164), 165 => chr(210).chr(144), 166 => chr(194).chr(166), 167 => chr(194).chr(167), 168 => chr(208).chr(129), 169 => chr(194).chr(169), 170 => chr(208).chr(132), 171 => chr(194).chr(171), 172 => chr(194).chr(172), 173 => chr(194).chr(173), 174 => chr(194).chr(174), 175 => chr(208).chr(135), 176 => chr(194).chr(176), 177 => chr(194).chr(177), 178 => chr(208).chr(134), 179 => chr(209).chr(150), 180 => chr(210).chr(145), 181 => chr(194).chr(181), 182 => chr(194).chr(182), 183 => chr(194).chr(183), 184 => chr(209).chr(145), 185 => chr(226).chr(132).chr(150), 186 => chr(209).chr(148), 187 => chr(194).chr(187), 188 => chr(209).chr(152), 189 => chr(208).chr(133), 190 => chr(209).chr(149), 191 => chr(209).chr(151), 192 => chr(208).chr(144), 193 => chr(208).chr(145), 194 => chr(208).chr(146), 195 => chr(208).chr(147), 196 => chr(208).chr(148), 197 => chr(208).chr(149), 198 => chr(208).chr(150), 199 => chr(208).chr(151), 200 => chr(208).chr(152), 201 => chr(208).chr(153), 202 => chr(208).chr(154), 203 => chr(208).chr(155), 204 => chr(208).chr(156), 205 => chr(208).chr(157), 206 => chr(208).chr(158), 207 => chr(208).chr(159), 208 => chr(208).chr(160), 209 => chr(208).chr(161), 210 => chr(208).chr(162), 211 => chr(208).chr(163), 212 => chr(208).chr(164), 213 => chr(208).chr(165), 214 => chr(208).chr(166), 215 => chr(208).chr(167), 216 => chr(208).chr(168), 217 => chr(208).chr(169), 218 => chr(208).chr(170), 219 => chr(208).chr(171), 220 => chr(208).chr(172), 221 => chr(208).chr(173), 222 => chr(208).chr(174), 223 => chr(208).chr(175), 224 => chr(208).chr(176), 225 => chr(208).chr(177), 226 => chr(208).chr(178), 227 => chr(208).chr(179), 228 => chr(208).chr(180), 229 => chr(208).chr(181), 230 => chr(208).chr(182), 231 => chr(208).chr(183), 232 => chr(208).chr(184), 233 => chr(208).chr(185), 234 => chr(208).chr(186), 235 => chr(208).chr(187), 236 => chr(208).chr(188), 237 => chr(208).chr(189), 238 => chr(208).chr(190), 239 => chr(208).chr(191), 240 => chr(209).chr(128), 241 => chr(209).chr(129), 242 => chr(209).chr(130), 243 => chr(209).chr(131), 244 => chr(209).chr(132), 245 => chr(209).chr(133), 246 => chr(209).chr(134), 247 => chr(209).chr(135), 248 => chr(209).chr(136), 249 => chr(209).chr(137), 250 => chr(209).chr(138), 251 => chr(209).chr(139), 252 => chr(209).chr(140), 253 => chr(209).chr(141), 254 => chr(209).chr(142), 255 => chr(209).chr(143)); $wc = array( 128 => chr(1).chr(128), 129 => chr(1).chr(129), 130 => chr(1).chr(130), 131 => chr(1).chr(131), 132 => chr(1).chr(132), 133 => chr(1).chr(133), 134 => chr(1).chr(134), 135 => chr(1).chr(135), 136 => chr(1).chr(136), 137 => chr(1).chr(137), 138 => chr(1).chr(138), 139 => chr(1).chr(139), 140 => chr(1).chr(140), 141 => chr(1).chr(141), 142 => chr(1).chr(142), 143 => chr(1).chr(143), 144 => chr(1).chr(144), 145 => chr(1).chr(145), 146 => chr(1).chr(146), 147 => chr(1).chr(147), 148 => chr(1).chr(148), 149 => chr(1).chr(149), 150 => chr(1).chr(150), 151 => chr(1).chr(151), //152 null 153 => chr(1).chr(153), 154 => chr(1).chr(154), 155 => chr(1).chr(155), 156 => chr(1).chr(156), 157 => chr(1).chr(157), 158 => chr(1).chr(158), 159 => chr(1).chr(159), 160 => chr(1).chr(160), 161 => chr(1).chr(161), 162 => chr(1).chr(162), 163 => chr(1).chr(163), 164 => chr(1).chr(164), 165 => chr(1).chr(165), 166 => chr(1).chr(166), 167 => chr(1).chr(167), 168 => chr(1).chr(168), 169 => chr(1).chr(169), 170 => chr(1).chr(170), 171 => chr(1).chr(171), 172 => chr(1).chr(172), 173 => chr(1).chr(173), 174 => chr(1).chr(174), 175 => chr(1).chr(175), 176 => chr(1).chr(176), 177 => chr(1).chr(177), 178 => chr(1).chr(178), 179 => chr(1).chr(179), 180 => chr(1).chr(180), 181 => chr(1).chr(181), 182 => chr(1).chr(182), 183 => chr(1).chr(183), 184 => chr(1).chr(184), 185 => chr(1).chr(185), 186 => chr(1).chr(186), 187 => chr(1).chr(187), 188 => chr(1).chr(188), 189 => chr(1).chr(189), 190 => chr(1).chr(190), 191 => chr(1).chr(191), 192 => chr(1).chr(192), 193 => chr(1).chr(193), 194 => chr(1).chr(194), 195 => chr(1).chr(195), 196 => chr(1).chr(196), 197 => chr(1).chr(197), 198 => chr(1).chr(198), 199 => chr(1).chr(199), 200 => chr(1).chr(200), 201 => chr(1).chr(201), 202 => chr(1).chr(202), 203 => chr(1).chr(203), 204 => chr(1).chr(204), 205 => chr(1).chr(205), 206 => chr(1).chr(206), 207 => chr(1).chr(207), 208 => chr(1).chr(208), 209 => chr(1).chr(209), 210 => chr(1).chr(210), 211 => chr(1).chr(211), 212 => chr(1).chr(212), 213 => chr(1).chr(213), 214 => chr(1).chr(214), 215 => chr(1).chr(215), 216 => chr(1).chr(216), 217 => chr(1).chr(217), 218 => chr(1).chr(218), 219 => chr(1).chr(219), 220 => chr(1).chr(220), 221 => chr(1).chr(221), 222 => chr(1).chr(222), 223 => chr(1).chr(223), 224 => chr(1).chr(224), 225 => chr(1).chr(225), 226 => chr(1).chr(226), 227 => chr(1).chr(227), 228 => chr(1).chr(228), 229 => chr(1).chr(229), 230 => chr(1).chr(230), 231 => chr(1).chr(231), 232 => chr(1).chr(232), 233 => chr(1).chr(233), 234 => chr(1).chr(234), 235 => chr(1).chr(235), 236 => chr(1).chr(236), 237 => chr(1).chr(237), 238 => chr(1).chr(238), 239 => chr(1).chr(239), 240 => chr(1).chr(240), 241 => chr(1).chr(241), 242 => chr(1).chr(242), 243 => chr(1).chr(243), 244 => chr(1).chr(244), 245 => chr(1).chr(245), 246 => chr(1).chr(246), 247 => chr(1).chr(247), 248 => chr(1).chr(248), 249 => chr(1).chr(249), 250 => chr(1).chr(250), 251 => chr(1).chr(251), 252 => chr(1).chr(252), 253 => chr(1).chr(253), 254 => chr(1).chr(254), 255 => chr(1).chr(255)); if ($code == 'u') { //win to utf $str = preg_replace ('/(['.chr(128).'-'.chr(255).'])/', chr(1).'$1', $str); $str = str_replace($wc, $uc,$str); return $str; } else { //utf8 to win $wc = array_slice(explode(chr(1),implode('',$wc)),1); return str_replace($uc, $wc, $str); }} //тест функции print Encode('Во-первых, В кодировке UTF-8 вы можете непосредственно включать в документ любые символы из всего набора Unicode. Старинные кодировки, такие как cp1251 или KOI8?R (извинте, но они на самом деле уже старинные, ибо будущее за utf8 :)) предоставляли не более 256 символов, а в Unicode есть свыше 100 000 символов. Среди них — типографские знаки (тире, кавычки, многоточие, апостроф, неразрывный пробел, неразрывный дефис и пр.), специальные символы (№, §, ©, ‰, ? и пр.), буквы с диакритическими знаками и лигатуры (e, e, U, ?, o, ? и пр.), символы почти всех существующих в мире алфавитов (?, ?, ?, ?,, ?, ? и пр.), пиктограммы и значки (>, ¦, ¦, O и пр.) и множество других символов. Самое классное в этом всём это то, что все эти символы можно вставлять непосредственно в редакторе (из таблицы символов или с помощью горячих клавиш), что делает код куда более читабельным, нежели использование кракозяб вроде ? — или ? (альтернативы в cp1251). Во-вторых, хочется оспорить то, что страницы на utf8 имеют гораздо больший размер, чем на cp1251. Символы ASCII(латиница, арабские цифры, знаки препинания и т.д.) занимают в utf8 всего один байт, так же как и в cp1251. Таким образом при создании страниц на латинице никаких увеличений в размере страниц не наблюдается. С кириллицей — согласен. Если документ содержит только буквы русского алфавита и никаких других символов (что, согласитесь, бывает достаточно редко, ибо без html-тегов не сильно обойдешься :)) — то в UTF?8 он действительно станет в два раза больше. А если в нём, например, поровну русских и арабских букв — в UTF?8 он будет в два раза меньше, чем, например, в cp1251. Чаще всего — основной вес страницы составляет не html-код, а всякого рода javascript, flash, картинки, css и т.д. Тем, кто заботится о «весе», следовало бы в первую очередь выкинуть из кода подстановки для тех символов, которым они не нужны, например, — для длинного тире или для неразрывного пробела (ой, как часто я вижу это в страницах новичков). Видим, что вместо 1 знака длинного тире мы пишем 6, вместо 1 знака неразрывного пробела мы пишем 5 знаков. И где же экономия? Действительно, иногда доходит до маразма — некто упирается: «Не буду делать страницы в UTF?8, потому что они от этого увеличиваются» — а сам при этом ваяет код с жуткими атрибутами и подстановками, который без них мог бы быть в пять раз короче. В-третьих, основное достоинство — это универсальность! Лично я не создаю свою CMS исключительно для русскоязычного сегмента рынка web-технологий. Благодаря utf-8 я могу создавать сайты без каких-либо переделок как для американцев, так и для немцев(с их буквочками вроде U), так и для арабов, так и для китайцев! И мне все равно, какой кодировка у них установлена, а какая нет, ибо Юникод у них установлен 100%. В-четвертых, Юникод является стандартом для работы таких частоиспользуемых ныне фунций php, как json_encode/json_decode, а так же используемого в Ajax XHttpRequest. Причем, начиная с 6й версии PHP Юникод станет стандартом почти для всех строковых функций. И напоследок, многие ссылаются на то, что люди постепенно переходят на utf8 потому, что “кто-то умный сказал, что это хорошо”. Соглашусь, кто-то умный это сказал уже давно, а именно — Консорциум W3C (кому-то эти 3 буквы что-то говорят? :)). И рекомендует он использовать для создания веб-страниц ни что иное, как utf8. Для тех, кто знает английский (а есть программисты, кто его не знает? :)) — можете почитать вот тут.' ,'u'); //win to utf для этого текста ~ быстродействие 0.00443 сек win to utf для этого текста ~ быстродействиe 0.00276 сек utf to win iconv utf8=>win ~ быстродействиe 0,000081 сек велосипед тормознее в ~ 35-50 раз чем iconv
в случае запроса страницы можно тупо поискать в нескольких вариантах плюс к тому можно посмотреть агента и от этого плясать