кодировка русского текста в cookie и знак + (PHP+JS))

C
На сайте с 31.10.2008
Offline
88
4986

Помещаю в теле страницы таким вот образом cookie в браузер

setCookie('DR_precision2', '2 мм + 2 ppm', 'permanent')

во внешнем файле хранится функция которая собственно и кладет куку


function setCookie(name, value, expires, path, domain) {
if (!path) path='/';

if (!domain){
domain = location.href;
var re = /https?:\/\/(www\.)?(.*?)(\/|$)/i;
if (re.test(domain)){
domain = RegExp.$2;
}

if (domain.indexOf(/\./) == -1) domain = "";
}
if (expires == 'permanent'){
expires = 'Fri, 25 Dec 2099 23:59:59 GMT';
} else {
((expires) ? "; expires=" + expires.toGMTString() : "");
}
var curCookie = name + "=" + escape(value) + ((expires) ? "; expires=" + expires : "") + ((domain) ? "; domain=" + domain : "") + "; path=" + path;
document.cookie = curCookie;
}

потом мне надо проверить с помощью PHP: если есть такая кука, я ищу строки в текстовом файле определенный текстовый фрагмент....


if ($_GET['DR_precision2']=='2 мм + 2 ppm'){
foreach ($bydrdistance as $string) { if(preg_match('/DR_precision::2/', $string)) $bydrprecision[]=$string;}}

НО ВОТ БЕДА!!!:)

значение "2 мм + 2 ppm" попадая в куку превращается в что-то другое...

GoogleChrome говорит что это вот такая строка: 2%20%u043C%u043C%20+%202%20ppm

if ($_GET['DR_precision2']=='2 мм + 2 ppm') - НЕ СРАБАТЫВАЕТ.

если кладу "2 мм 2 ppm", то if ($_GET['DR_precision2']=='2 мм 2 ppm') - СРАБАТЫВАЕТ.

ВОПРОС: 1. Что же происходит с кодировкой русского текста вcookie?

2. Почему мешает плюс и как с этим бороться? Может функцию setCookie надо модифицировать чтобы "+" не смущал ее?

3. Может $_GET['DR_precision2'] как-то декодировать перед проверкой? Или "+" все портит и уже позно декдировать?

Очень надеюсь на помощь. Спасибо!!!

[Удален]
#1

Cubana, может проще русские куки не класть? они сохраняются как ютф-8 строки.

C
На сайте с 31.10.2008
Offline
88
#2

bearman, да я вот сижу думаю. похоже, что тут именно в + дело,

if ($_GET['DR_precision2']=='2 мм + 2 ppm') на кодировку как видно "все равно". Тут наверно как-то поведение знака "+", когда он в куках влияет... может он там что-то склеивает...

[Удален]
#3

возможно он становится " " пробелом? :)

если учитывать специфику http протокола, то "+" = " " :)

C
На сайте с 31.10.2008
Offline
88
#4

В программировании почти никогда не помогает угадываение))) Ту надо знать... но попробую.

коллеги, может знает кто наверняка???

Cubana добавил 23.06.2010 в 00:08

bearman, Коллега!!!! Вы правы!!! =)) Благодариссимо!!!

[Удален]
#5
Cubana:
В программировании почти никогда не помогает угадываение))

не зря существует фраза "учи матчасть" )))))

просто %20 и "+" - это все пробел в url экранировании, оно же применяется и для куки, отсюда и "фишка" ... будем знать на будущее, я просто предположил :)

BrokenBrake
На сайте с 03.03.2007
Offline
194
#6

Хм, тоже не знал, что куки в URL кодируются. Странно.

BrokenBrake добавил 23.06.2010 в 01:59

А почему у меня в микротудушке плюс нормально добавляется тогда?

[Удален]
#7

BrokenBrake, ну ведь это ты! а тут всего лишь мы ))

name + "=" + escape(value)

возможно у тебя этого нет :)

[Удален]
#8
Сообщение от Cubana
В программировании почти никогда не помогает угадываение))

ааааа жеесть! *хлопает в истереке по полу*. а что же помогает, по вашему?

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий