PHP + SACK + WINDOWS-1251 = Fu...

Тема стара как мир, но допустимого решения не нашел:JS -> PHP -> Mysql -> PHP -> JSотправляем русский текст c input'а в 1251 , сервер принимает пишет в базу, читает с базы 1251, посылает клиенту, скрипт тулит в divИспользуется:
  • Кодировка сайта: windows-1251 (не предлагать перейти на UTF-8)
  • Кодировка базы: windows-1251 (не предлагать перейти на UTF-8)
  • AJAX модуль Simple Ajax Code Kit
Цель: Поиск по сайту, реализация с использованием явыскрипта. Нужно решение именно на этом CodeKit'е, так как он маленький.p.s. с prototype.js такого не возникает, посылание обычного header("Content-type: text/html; charset=windows-1251") хватает, а с этим - фиг
8 ответов

<a href="http://www.w3schools.com/jsref/jsref_encodeURIComponent.asp" target="_blank" rel="nofollow">encodeURIComponent</a> -> <a href="http://php.net/rawurldecode" target="_blank" rel="nofollow">rawurldecode</a>?
С возвратом результата - все класс, спасибо. Но вот encodeURIComponent передала все нормально в кодах с %, вот только что с ними там делать? PHP-исходник в ANSI


Но вот encodeURIComponent передала все нормально в кодах с %, вот только что с ними там делать?
Глянь снова на функцию rawurldecode, попробуй почитать мануал.


<div> <table cellspacing="0" summary="table31"> <tbody> <tr> <td>Цитата(Deg @  1.3.2008,  21:07 )</td> </tr> <tr> <td>Но вот encodeURIComponent передала все нормально в кодах с %, вот только что с ними там делать?</td> </tr> </tbody> </table> </div>Глянь снова на функцию rawurldecode, попробуй почитать мануал.
Да вроде нормально читаю...клиент кодирует строку руссо в %D1%80%D1%83%D1%81%D1%81%D0%BE
encodeURIComponent('руссо');
echo (" ".$_POST['key1']);
Но вот 
echo rawurldecode($_POST['key1']);
превращает его в СЂСѓСЃСЃРѕГде я натупил?Добавлено через 14 минут и 17 секундТупка найдена, в начале обработчика на php убрал (как не странно) 
header("Content-type: text/html; charset=windows-1251");
 и все запахало, благодарю Вас, Sardar, тему считаю закрытой  


Опять затупил...Когда делаем вот так:
echo urldecode($_POST['key1']);echo (" руссо");
получаем: руссо ����, т.е. то что пришло с JS - декодилось, а то что echo ("руссо"); - бред!!!!А когда делаем вот так:
@header("Content-type: text/html; charset=WINDOWS-1251"); echo urldecode($_POST['key1']);echo ("руссо");
Выдает вот такое: СЂСѓСЃСЃРѕ руссоКак быть?


Нашел выход, да вот глупый до горя, так как думаю что изобрел велик явно не в первый раз, и есть выход с аналогичным результатом и не такой геморный:Файл в ANSI и в него отправляю encodeURIComponent('руссо'), обрабатываю вот этимс:
@header("Content-type: text/html; charset=WINDOWS-1251"); function decoder($str) {$ansi = array('а','б','в','г','д','е','ё','ж','д','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я','А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я');$ansi_1 = array('%E0','%E1','%E2','%E3','%E4','%E5','%B8','%**','%E7','%E8','%E9','%EA','%**','%EC','%ED','%EE','%EF','%F0','%F1','%F2','%F3','%F4','%F5','%F6','%F7','%F8','%F9','%FA','%FB','%FC','%FD','%FE','%FF','%C0','%C1','%C2','%C3','%C4','%C5','%A8','%C6','%C7','%C8','%C9','%CA','%CB','%CC','%CD','%CE','%CF','%D0','%D1','%D2','%D3','%D4','%D5','%D6','%D7','%D8','%D9','%DA','%DB','%DC','%DD','%DE','%DF');$ansi_2 = array('%D0%B0','%D0%B1','%D0%B2','%D0%B3','%D0%B4','%D0%B5','%D1%91','%D0%B6','%D0%B7','%D0%B8','%D0%B9','%D0%BA','%D0%BB','%D0%BC','%D0%BD','%D0%BE','%D0%BF','%D1%80','%D1%81','%D1%82','%D1%83','%D1%84','%D1%85','%D1%86','%D1%87','%D1%88','%D1%89','%D1%8A','%D1%8B','%D1%8C','%D1%8D','%D1%8E','%D1%8F','%D0%90','%D0%91','%D0%92','%D0%93','%D0%94','%D0%95','%D0%81','%D0%96','%D0%97','%D0%98','%D0%99','%D0%9A','%D0%9B','%D0%9C','%D0%9D','%D0%9E','%D0%9F','%D0%A0','%D0%A1','%D0%A2','%D0%A3','%D0%A4','%D0%A5','%D0%A6','%D0%A7','%D0%A8','%D0%A9','%D0%AA','%D0%AB','%D0%AC','%D0%AD','%D0%AE','%D0%AF');    if (!empty($str)) {        if (substr($str,0,2) == "%D") return str_replace($ansi_2,$ansi,$str); else return str_replace($ansi_1,$ansi,$str);    } else return '';} echo ($_POST['key1'])."<BR />";echo ("руссо")."<BR />";echo decoder($_POST['key1'])."<BR />";
и вот результат:
%D1%80%D1%83%D1%81%D1%81%D0%BEруссоруссо
Вот теперь Ваши коментарии по поводу моего корявого кода 


превращает его в СЂСѓСЃСЃРѕ
Какая кодировка удваивает кириллицу и в ANSI выглядит каракулями? UTF-8echo iconv("UTF-8", "CP1251", urldecode($_POST['key1']));


iconv("UTF-8", "CP1251", urldecode($_POST['key1'])); 
...и еще разок спасибо. Приятно иметь дело с профи