Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как экранировать строки? кирилица кракозябрами в cookie 
:(
    Опции темы
Reptor
Дата 12.7.2005, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



Уже много чего пересмотрел и перепробовал нечего не выходит. проблема такова->
PHP скрипт записывает слово в cookie а когда JavaScript'ом вытягиваеться это слово у него какаята неизвестная кодировка так как мне это слова предоставить в нормальном виде
Добавлено @ 13:42
P.S на русском языке
PM MAIL ICQ   Вверх
Aliance
Дата 12.7.2005, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Использовать функцию (де)кодирования, такой как escape/unescape

Еще бы неплохо бы посматривать прикрепленные топики.
Перенесено в раздел для начинающих.
PM MAIL WWW ICQ Skype   Вверх
Reptor
Дата 12.7.2005, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



я это ужё всё перепробовал нечего не ыходит
PM MAIL ICQ   Вверх
Aliance
Дата 12.7.2005, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Кидай код.
PM MAIL WWW ICQ Skype   Вверх
Reptor
Дата 12.7.2005, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



Код

 var arg = 'имя_куки'+"=";
     var alen = arg.length;
     var clen = document.cookie.length;
     var endstr = 0;
     var i = 0;
     while (i < clen)
     {
        var j = i + alen;
        if (document.cookie.substring(i, j) == arg){
             endstr = document.cookie.indexOf (";", j);
             if (endstr == -1){
                  endstr = document.cookie.length;
             }
             value=unescape(document.cookie.substring(j, endstr));
        }
        i = document.cookie.indexOf(" ", i) + 1;
        if (i == 0) { break; }
      }


в value содержиться значение куки вот его надо привести к нормальному виду
PM MAIL ICQ   Вверх
Sardar
Дата 12.7.2005, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Reptor это ты читаешь куку, а когда пишешь, функцией escape пользуешся?


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Reptor
Дата 12.7.2005, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



Цитата
функцией escape пользуешся?


Нет не пользуюсь но куку пишет у меня ПХП, а там нормальный русский текст.
PM MAIL ICQ   Вверх
Sardar
Дата 12.7.2005, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Ну наверное сам можешь догадаться, что пишет PHP куку явно не в urlencoded smile
Подсказка: есть функции (raw)urlencode


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Reptor
Дата 12.7.2005, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



в пхп я её применил а как в JS какой функцией строку преобразовать?
PM MAIL ICQ   Вверх
Aliance
Дата 12.7.2005, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Чего не понять: в PHP ты кодируешь ее, в а JS декодируешь ее.
PM MAIL WWW ICQ Skype   Вверх
Reptor
Дата 12.7.2005, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



Цитата
Чего не понять: в PHP ты кодируешь ее, в а JS декодируешь ее.

Понятно, какой функциеё я ж спросил
PM MAIL ICQ   Вверх
Aliance
Дата 12.7.2005, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Цитата(Sardar @ 12.7.2005, 20:03)
Подсказка: есть функции (raw)urlencode

smile
PM MAIL WWW ICQ Skype   Вверх
Reptor
Дата 12.7.2005, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



ну так это вроде как в пхп а JS выдаёт ошибку
PM MAIL ICQ   Вверх
Sardar
Дата 12.7.2005, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Reptor PHP rawurlencode кодирует строку в URL совместимую(%код), JS unescape декодирует эту строку. НО PHP работает с однобайтовыми строками, а JS с юникодом(UCS-2). Следовательно нужно в заголовках и в meta прописать ту кодировку, в которой у тебя строки на сервере.

Лучше если ты конвертнёшь их на сервере в UTF-8:
Код
echo rawurlencode(iconv("windows-1251", "UTF-8", $your_string));

Конвертнёт строку из windows-1251 в UTF-8, затем закодирует в url совместимую. Эту термоядерную смесь выросшую в 6 раз декодируем на клиенте через decodeURIComponent. При этом не важно какая кодировка на сервере и на клиенте, мы получим кирилицу(юникод).


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Reptor
Дата 13.7.2005, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



Я всё так и зделал но JS выдаёт следущую ошибку ->

"Обнаружена недопустимая кодировка при попытке декодирования"
PM MAIL ICQ   Вверх
Sardar
Дата 13.7.2005, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Reptor выкладывай код, как PHP так и JS, весь код, мы не телепаты.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Reptor
Дата 13.7.2005, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



Вот код на ПХПХ

Код

$all_car="автобус";
rawurlencode(iconv("windows-1251", "UTF-8", $all_car));
setcookie('cars', $all_car);


а вот JS который берёт куку

Код

var arg = "cars=";
     var alen = arg.length;
     var clen = document.cookie.length;
     var endstr = 0;
     var i = 0;
     while (i < clen)
     {
        var j = i + alen;
        if (document.cookie.substring(i, j) == arg){
             endstr = document.cookie.indexOf (";", j);
             if (endstr == -1){
                  endstr = document.cookie.length;
             }
             value=decodeURIComponent(document.cookie.substring(j, endstr));
        }
        i = document.cookie.indexOf(" ", i) + 1;
        if (i == 0) { break; }
      }


вотето вот value надо получить в нормальном русском тексте
PM MAIL ICQ   Вверх
Sardar
Дата 13.7.2005, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Reptor угу, только нужно знать что строки в PHP не изменяемые и функция rawurlencode возвращает строку с результатом smile

Если не понял, то поставь echo $all_car, а затем перед rawurlencode поставь echo, сравни полученные строки.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Reptor
Дата 13.7.2005, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



Sardar Полученные строки совершенно разные как быть?

PM MAIL ICQ   Вверх
Sardar
Дата 13.7.2005, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Повторяю, смотрим прототип функции rawurlencode, убеждаемся что функция возвращает строку, если по прототипу не видно, то перечитываем описание к функции.

Думаем. Видать это возвращаемое значение и есть то что нам нужно! smile
Ещё раз думаем.

Если не получаеться smile

Код
$all_car="автобус";
$all_car=rawurlencode(iconv("windows-1251", "UTF-8", $all_car));
setcookie('cars', $all_car);

При этом твой редактор должен сохранять .php файл в кодировке windows-1251. А работал бы PHP в юникоде, проблем бы не было.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Aliance
Дата 13.7.2005, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Ну наверное так:
Код

$all_car = "автобус";
$all_car = rawurlencode(iconv("windows-1251", "UTF-8", $all_car));
setcookie('cars', $all_car);

Добавлено @ 20:13
ой...пока писал Сардар уже все написал smile
PM MAIL WWW ICQ Skype   Вверх
Reptor
Дата 13.7.2005, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



ну так совсем нечего не выходит я уже как тоглько непробывал
PM MAIL ICQ   Вверх
Sardar
Дата 13.7.2005, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Reptor в смысле не выходит? Поставь куку как сказанно выше, затем распечатай document.cookie на клиенте и скинь сюда. Чудес не бывает smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Aliance
Дата 13.7.2005, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



И еще учти это и это.
PM MAIL WWW ICQ Skype   Вверх
Reptor
Дата 13.7.2005, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



вот такое вот значение храниться в куки
-%21--%21--%21-%25E0%25E2%25F2%25EE%25E1%25F3%25F1

а потом делаю декодирование и вообще выводит undefine и зделал так как было сказано выше
PM MAIL ICQ   Вверх
Sardar
Дата 14.7.2005, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Упс, оказываеться PHP сам экранирует строки в url, следовательно rawurlencode не нужен, хотя от него помимо увеличения размеа куки никаких проблем более нет.

Код
$all_car="автобус";
setcookie('cars', iconv("windows-1251", "UTF-8", $all_car), time()+60*20); //ставим куку на 20 минут


Читаем куку:
Код
function getCookie (name) {
    var prefix = name + "=";
    var cookieStartIndex = document.cookie.indexOf(prefix);
    if (cookieStartIndex == -1) return null;
    var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);
    if (cookieEndIndex == -1) cookieEndIndex = document.cookie.length;
    return document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex);
} 

var cars=getCookie("cars");
if(cars) alert(decodeURIComponent(cars));
else alert("Cookie is empty or not set");



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Reptor
Дата 15.7.2005, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



Sardar огромное спасибо наконецто всё нормально
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0743 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.