Javascript-форум (https://javascript.ru/forum/)
-   Мобильный JavaScript (https://javascript.ru/forum/mobile/)
-   -   URIError: malformed URI sequence (https://javascript.ru/forum/mobile/34244-urierror-malformed-uri-sequence.html)

Urfin 26.12.2012 03:37

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
Погуглив, я нашел объяснение, что скрипт ругается на знак процента в урле. Но как решить эту проблему так и не понятно.
Никто не сталкивался?

Deff 26.12.2012 04:22

Цитата:

Сообщение от Urfin
Погуглив, я нашел объяснение, что скрипт ругается на знак процента в урле.

Что за скрипт ?

tenshi 26.12.2012 11:50

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


[telepat]нужно поставить mbstring[/telepat]

Urfin 26.12.2012 11:56

Глючит скрипт 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;
}

tenshi 26.12.2012 14:07

это не скрипт глючит а ссылки у тебя кривые

Urfin 26.12.2012 15:47

Цитата:

Сообщение от tenshi (Сообщение 223581)
это не скрипт глючит а ссылки у тебя кривые

Подскажи плиз как исправить.
Если в urlencode передаются русские фразы, то в такой вид они конвертятся, с %.
Ты говоришь mbstring нужно ставить.
А можно поподробнее пояснить что к чему?
Вот какие настройки php сейчас у меня.

tenshi 26.12.2012 16:01

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

проблема в том, что у тебя строка разрезана по середине русского символа, который в utf-8 состоит из 2 байт.

Urfin 26.12.2012 16:46

Цитата:

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

проблема в том, что у тебя строка разрезана по середине русского символа, который в utf-8 состоит из 2 байт.

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

$q = preg_replace("/(\s+)/", "+", trim($q));

tenshi 27.12.2012 01:44

не важно в какой кодировке сайт. формы по дефолту посылают данные в utf-8

Urfin 27.12.2012 02:20

Цитата:

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

$q = preg_replace("/(\s+)/", "+", trim($q));

К сожалению этот костылек не универсален. При наличии в воводе постраничной навигации при переходе на следующую страницу урл по умолчанию urlencod-ится и проблема с % в строке запроса снова всплывает. Даже пока не знаю как раскрутить.


Часовой пояс GMT +3, время: 16:14.