Июл 062011
 

Когда я писал сервис сокращения URL, то передавая параметр через аякс методом GET столкнулся с проблемой: если в передаваемой строке имеются апмерсанды (а в моем случае они там есть постоянно), то передаваемый текст ссылки (например: http://site.ru/?id=1&param2=true) обрезался четко после апмерсанда, ну и его не захватывало тоже, т.е. ссылка вбивалась в базу в виде http://site.ru/?id=1 и это понятно, браузер просто воспринимал то, что идет после амперсанда как еще одну переменную текущего GET запроса. Проблему решил аналогами пхп-шной функции base64_encode.

Перед отправкой обрабатывал строку этой функцией, получал кашу типа 0LLQtdCx0YHRgtGD0LTQuNGPLtC0YDQsy7RgNGE и все было ОК. Но потом, сокращая кирилический домен вебстудия.орг.рф я получал в базе результат вебстудия.д`4, и ну никак не могу понять в чем загогулина. Остальные ссылки работают — именно эта нет.. Через пару часов тестирования я таки понял в чем дело.

Результат обработки функцией base64_encode строки вебстудия.орг.рф получалось

0LLQtdCx0YHRgtGD0LTQuNGPLtC+0YDQsy7RgNGE

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

0LLQtdCx0YHRgtGD0LTQuNGPLtC 0YDQsy7RgNGE

решилось простой заменой

$_GET['url']=str_replace(' ','+',$_GET['url']);

Что-то подсказывает мне, что существует способ и поумнее, но я, к сожалению, о нем не знаю.

Дорогие читатели! Мною было принято решение закрыть комментарии на блоге. Теперь все обсуждения переносятся на недавно открытый форум, ввиду того, что формат сообщений там намного удобней для обсуждения. Не стесняйтесь задавать любые вопросы по тематике блога! Я всегда на связи.
Перейти на форум
.
 Опубликовано в 4:15 пп  С меткой:,

Извините, форма комментирования закрыта в данный момент.