В общем я выяснил, что rawurlencode() превращает пробелы в %20, а urlencode в +. Зачем это нужно? Когда юзать urlencode, а когда rawurlencode?
Э, вроде посылка через POST кодирует так же как urlencode(), а GET (раньше) кодировалась как rawurlencode(). То есть использование urlencode() предпочтительнее для GET и исключительная для POST. Эм, ещё раз. Для GET - без разницы как ты будешь кодировать УРЛ, но для POST формат важен. Короче, используй urlencode().
PHP: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>URL-functions test</title> </head> <body> <?php $url = 'http://yandex.ru/yandsearch?text=%D0%BF%D1%80%D0%BE%D0%B1%D0%B5%D0%BB%2B%D0%BF%D1%80%D0%BE%D0%B1%D0%B5%D0%BB+%D0%BF%D1%80%D0%BE%D0%B1%D0%B5%D0%BB&lr=50'; ?> <p>url = <input type="text" value="<?php echo($url); ?>" size="128" maxlength="1024" /></p> <p>urldecode = <input type="text" value="<?php echo(urldecode($url)); ?>" size="128" maxlength="1024" /></p> <p>rawurldecode = <input type="text" value="<?php echo(rawurldecode($url)); ?>" size="128" maxlength="1024" /></p> <p>decodeURI = <input id="url" type="text" value="" size="128" maxlength="1024" /></p> <script type="text/javascript"> var url = '<?php echo($url); ?>'; document.getElementById('url').value = decodeURI(url); </script> </body> </html> на выходе имеем: url = http://yandex.ru/yandsearch?text=%D0%BF ... 0%BB&lr=50 urldecode = http://yandex.ru/yandsearch?text=пробел+пробел пробел&lr=50 rawurldecode = http://yandex.ru/yandsearch?text=пробел+пробел+пробел&lr=50 decodeURI = http://yandex.ru/yandsearch?text=пробел%2Bпробел+пробел&lr=50 мне нужен такой результат, который дает функция javascript: decodeURI, но в php!