Когда я писал сервис сокращения URL, то передавая параметр через аякс методом GET столкнулся с проблемой: если в передаваемой строке имеются апмерсанды (а в моем случае они там есть постоянно), то передаваемый текст ссылки (например: http://site.ru/?id=1¶m2=true) обрезался четко после апмерсанда, ну и его не захватывало тоже, т.е. ссылка вбивалась в базу в виде http://site.ru/?id=1 и это понятно, браузер просто воспринимал то, что идет после амперсанда как еще одну переменную текущего GET запроса. Проблему решил аналогами пхп-шной функции base64_encode.
Перед отправкой обрабатывал строку этой функцией, получал кашу типа 0LLQtdCx0YHRgtGD0LTQuNGPLtC0YDQsy7RgNGE и все было ОК. Но потом, сокращая кирилический домен вебстудия.орг.рф я получал в базе результат вебстудия.д`4, и ну никак не могу понять в чем загогулина. Остальные ссылки работают – именно эта нет.. Через пару часов тестирования я таки понял в чем дело.
Результат обработки функцией base64_encode строки вебстудия.орг.рф получалось
0LLQtdCx0YHRgtGD0LTQuNGPLtC+0YDQsy7RgNGE
обратите внимание на плюсик в строке, скрипт, собака воспринял его как пробел, ну и получил
0LLQtdCx0YHRgtGD0LTQuNGPLtC 0YDQsy7RgNGE
решилось простой заменой
$_GET['url']=str_replace(' ','+',$_GET['url']);
Что-то подсказывает мне, что существует способ и поумнее, но я, к сожалению, о нем не знаю.