Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.10.2008, 23:31
Новичок на форуме
Отправить личное сообщение для Sergey K Посмотреть профиль Найти все сообщения от Sergey K
 
Регистрация: 15.10.2008
Сообщений: 1

decodeURI ругается
Никак не могу решить следующую задачу:

На странице сайта есть поисковая форма. Серверные скрипты не используются. Надо сделать так, чтобы поисковый запрос, по которому человек, возможно, пришел на сайт, автоматом вставлялся в поисковую форму на сайте. Первое (или не первое, но все равно придется ), что надо сделать, привести к вменяемому виду URL реферера. Русский текст, как известно, кодируется. Вот на такой код:
var rf=decodeURI(document.referrer);
,браузер ругается в том смысле, что URI неправильный. decodeURIComponent тоже ругается. Unescape даром что obsolete, не ругается, но все равно фигню чучмекскую выдает. :confused: Нашел скрипт, который парсит window.location, но он корректно работает только если страница UTF-8, а у меня windows-1251.

Кто-нибудь может помочь?
Ответить с цитированием
  #2 (permalink)  
Старый 15.10.2008, 23:40
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Sergey K
но он корректно работает только если страница UTF-8, а у меня windows-1251.
Важно в какой кодировке страница у поисковика. А способа узнать кодировку я, например, не знаю. Если точно известна кодировка, то http://xpoint.ru/know-how/JavaScript...dows1251IKO I
Ответить с цитированием
  #3 (permalink)  
Старый 16.10.2008, 22:59
Infocatcher
 
Сообщений: n/a

Лично не проверял, но, возможно, поможет вот это:
http://dark-demon.nm.ru/web/now_how/searcher/
Ответить с цитированием
  #4 (permalink)  
Старый 16.10.2008, 23:17
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Infocatcher, это к чему вообще?
Ответить с цитированием
  #5 (permalink)  
Старый 17.10.2008, 01:33
Infocatcher
 
Сообщений: n/a

Эммм... До конца долистали?

Оттуда:
Цитата:
Что если юзер зашел на сайт по ссылке с поисковика? Значит он уже что-то вводил в строку поиска...
[...]
window.onload= function()
{
  var r= parent.document.referrer+"&";
  if (r.search(/[\&\?]text\=(.*)\&/)==-1)
  if (r.search(/[\&\?]q\=(.*)\&/)==-1)
  if (r.search(/[\&\?]words\=(.*)\&/)==-1)
  if (r.search(/[\&\?]query\=(.*)\&/)==-1)
  if (r.search(/[\&\?]search\=(.*)\&/)==-1)
  {};
  document.forms.search.stext.value= unescape(RegExp.$1);
}
Ответить с цитированием
  #6 (permalink)  
Старый 17.10.2008, 08:47
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Infocatcher, а вы первое сообщение дочитали?
Сообщение от Sergey K
Unescape даром что obsolete, не ругается, но все равно фигню чучмекскую выдает.
Ответить с цитированием
  #7 (permalink)  
Старый 17.10.2008, 23:14
Infocatcher
 
Сообщений: n/a

Уже не помню

Но у меня заработало вот так:
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'ов каким-нибудь файрволом. У меня вот они вообще подменяются.

[UPD]
А вот с cp1251 – как-то сразу не обратил внимания – действительно траблы...

[UPD – 2]

Полагаю, можно сделать
unescape(qStr)

Потом попытаться перекодировать. Где в результате будет содержаться кириллица
/[а-яё]/i.test(qStr)

, то и использовать. Иначе – брать исходный unescape(qStr).

Последний раз редактировалось Андрей Параничев, 17.10.2008 в 23:46.
Ответить с цитированием
  #8 (permalink)  
Старый 17.10.2008, 23:50
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Infocatcher, проблема в том, что заранее неизвестно, в какой кодировке приходит строка. И вообще говоря, ее распознавание задача нетривиальная.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск