Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.12.2012, 03:37
Аспирант
Отправить личное сообщение для Urfin Посмотреть профиль Найти все сообщения от Urfin
 
Регистрация: 22.07.2009
Сообщений: 85

URIError: malformed URI sequence
Всем привет.
Делаю сайт мобильный на jquery.mobile 1.2.0.
И столкнулся с такой проблемой.
Когда запускаю поиск по сайту и в Get параметры уходит слово прошедшее через urlencode, перестает работать кнопка назад в браузере.
Генерится ошибка URIError: malformed URI sequence.
Урл выглядит примерно так:
/search/index.php?q=%EC%EE%EB%EE%F2%EE%EA&s=y
Погуглив, я нашел объяснение, что скрипт ругается на знак процента в урле. Но как решить эту проблему так и не понятно.
Никто не сталкивался?
Ответить с цитированием
  #2 (permalink)  
Старый 26.12.2012, 04:22
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Urfin
Погуглив, я нашел объяснение, что скрипт ругается на знак процента в урле.
Что за скрипт ?
Ответить с цитированием
  #3 (permalink)  
Старый 26.12.2012, 11:50
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

console.log( decodeURIComponent('%EC%EE%EB%EE%F2%EE%EA') )


[telepat]нужно поставить mbstring[/telepat]
__________________
.ня
Ответить с цитированием
  #4 (permalink)  
Старый 26.12.2012, 11:56
Аспирант
Отправить личное сообщение для Urfin Посмотреть профиль Найти все сообщения от Urfin
 
Регистрация: 22.07.2009
Сообщений: 85

Глючит скрипт jquery.mobile.1.2.0.js
в строчке 3159:
//if the url is in the stack, it's a forward or a back
if ( decodeURIComponent( opts.currentUrl ) === decodeURIComponent( historyEntry.url ) ) {
//define back and forward by whether url is older or newer than current page
back = i < urlHistory.activeIndex;
forward = !back;
newActiveIndex = i;
}
Ответить с цитированием
  #5 (permalink)  
Старый 26.12.2012, 14:07
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

это не скрипт глючит а ссылки у тебя кривые
__________________
.ня
Ответить с цитированием
  #6 (permalink)  
Старый 26.12.2012, 15:47
Аспирант
Отправить личное сообщение для Urfin Посмотреть профиль Найти все сообщения от Urfin
 
Регистрация: 22.07.2009
Сообщений: 85

Сообщение от tenshi Посмотреть сообщение
это не скрипт глючит а ссылки у тебя кривые
Подскажи плиз как исправить.
Если в urlencode передаются русские фразы, то в такой вид они конвертятся, с %.
Ты говоришь mbstring нужно ставить.
А можно поподробнее пояснить что к чему?
Вот какие настройки php сейчас у меня.
Ответить с цитированием
  #7 (permalink)  
Старый 26.12.2012, 16:01
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

чувствую надо включить mbstring.func_overload
или не хватает модификатора U в регулярках

проблема в том, что у тебя строка разрезана по середине русского символа, который в utf-8 состоит из 2 байт.
__________________
.ня
Ответить с цитированием
  #8 (permalink)  
Старый 26.12.2012, 16:46
Аспирант
Отправить личное сообщение для Urfin Посмотреть профиль Найти все сообщения от Urfin
 
Регистрация: 22.07.2009
Сообщений: 85

Сообщение от tenshi Посмотреть сообщение
чувствую надо включить mbstring.func_overload
или не хватает модификатора U в регулярках

проблема в том, что у тебя строка разрезана по середине русского символа, который в utf-8 состоит из 2 байт.
Установил mbstring.func_overload = 2, но не помогло.
У меня сайт вообще в кодировке "windows-1251".
Вобщем пока решил ситуацию таким способом. Отказался от обработки строки функцией urlencode. Вместо нее пробелы в строке заменяю плюсами и передаю такую строку в поиск. Так вроде пока работает.

$q = preg_replace("/(\s+)/", "+", trim($q));
Ответить с цитированием
  #9 (permalink)  
Старый 27.12.2012, 01:44
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

не важно в какой кодировке сайт. формы по дефолту посылают данные в utf-8
__________________
.ня
Ответить с цитированием
  #10 (permalink)  
Старый 27.12.2012, 02:20
Аспирант
Отправить личное сообщение для Urfin Посмотреть профиль Найти все сообщения от Urfin
 
Регистрация: 22.07.2009
Сообщений: 85

Сообщение от Urfin Посмотреть сообщение
Вобщем пока решил ситуацию таким способом. Отказался от обработки строки функцией urlencode. Вместо нее пробелы в строке заменяю плюсами и передаю такую строку в поиск. Так вроде пока работает.

$q = preg_replace("/(\s+)/", "+", trim($q));
К сожалению этот костылек не универсален. При наличии в воводе постраничной навигации при переходе на следующую страницу урл по умолчанию urlencod-ится и проблема с % в строке запроса снова всплывает. Даже пока не знаю как раскрутить.
Ответить с цитированием
Ответ



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

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