decodeURI ругается
Никак не могу решить следующую задачу:
На странице сайта есть поисковая форма. Серверные скрипты не используются. Надо сделать так, чтобы поисковый запрос, по которому человек, возможно, пришел на сайт, автоматом вставлялся в поисковую форму на сайте. Первое (или не первое, но все равно придется :) ), что надо сделать, привести к вменяемому виду URL реферера. Русский текст, как известно, кодируется. Вот на такой код: var rf=decodeURI(document.referrer);,браузер ругается в том смысле, что URI неправильный. decodeURIComponent тоже ругается. Unescape даром что obsolete, не ругается, но все равно фигню чучмекскую выдает. :confused: Нашел скрипт, который парсит window.location, но он корректно работает только если страница UTF-8, а у меня windows-1251. Кто-нибудь может помочь? |
Цитата:
|
Лично не проверял, но, возможно, поможет вот это:
http://dark-demon.nm.ru/web/now_how/searcher/ |
Infocatcher, это к чему вообще?
|
Эммм... До конца долистали?
Оттуда: Цитата:
|
Infocatcher, а вы первое сообщение дочитали?
Цитата:
|
Уже не помню :)
Но у меня заработало вот так: var ref = location.href; // document.referrer; function getQ(str) { var qStr = /[\?&](?:text|q|words|query|search)=([^\?&]*)/.test(ref); return qStr && decodeURI(RegExp.$1); } alert(getQ(ref)); Проверял через запуск из адресной строки: javascript: (function() { var ref = location.href; function getQ(str) { var qStr = /[\?&](?:text|q|words|query|search)=([^\?&]*)/.test(ref); return qStr && decodeURI(RegExp.$1); } alert(getQ(ref)); })(); Особо развлекаться было лениво... В общем, в Firefox 2.0+, Opera 9.2+ и IE 6.0, 7.0 все Ok. К тому же, проблема может быть из-за (кривого) блокирования referer'ов каким-нибудь файрволом. У меня вот они вообще подменяются. :D [UPD] А вот с cp1251 – как-то сразу не обратил внимания – действительно траблы... [UPD – 2] Полагаю, можно сделать unescape(qStr) Потом попытаться перекодировать. Где в результате будет содержаться кириллица /[а-яё]/i.test(qStr) , то и использовать. Иначе – брать исходный unescape(qStr). |
Infocatcher, проблема в том, что заранее неизвестно, в какой кодировке приходит строка. И вообще говоря, ее распознавание задача нетривиальная.
|
Часовой пояс GMT +3, время: 14:42. |