Конвертация символов

Тема в разделе "PHP", создана пользователем new_forward, 30 янв 2012.

Модераторы: latteo
  1. new_forward

    new_forward

    Регистр.:
    5 май 2008
    Сообщения:
    668
    Симпатии:
    44
    Доброго времени суток!

    Как из вот такого запроса:

    Код:
    http://site.ru/list/?&category_id=15§ion_id=1&subscribe_id=&filter_id=&mark_id=0&year%5B1%5D=1993&year%5B2%5D=&color_id=&price_usd%5B1%5D=100000&price_usd%5B2%5D=¤cy_key=RUR&body_key=&run%5B1%5D=&run%5B2%5D=&engine_key=0&engine_volume%5B1%5D=&engine_volume%5B2%5D=&drive_key=&engine_power%5B1%5D=&engine_power%5B2%5D=&transmission_key=0&used_key=5&wheel_key=&custom_key=1&available_key=1&change_key=1&owner_pts=&stime=2&country_id=1&has_photo=0®ion%5B%5D=87®ion_id=87&sort_by=2&city_id=1123&output_format=1&client_id=1&extras%5B1%5D=0&extras%5B2%5D=0&extras%5B3%5D=0&extras%5B4%5D=0&extras%5B5%5D=0&extras%5B6%5D=0&extras%5B7%5D=&extras%5B8%5D=0&extras%5B9%5D=0&extras%5B10%5D=0&extras%5B11%5D=0&extras%5B12%5D=&extras%5B13%5D=0&extras%5B14%5D=0&extras%5B15%5D=0&extras%5B16%5D=0&extras%5B17%5D=0&extras%5B18%5D=&extras%5B19%5D=&extras%5B20%5D=&extras%5B21%5D=&extras%5B22%5D=&extras%5B23%5D=0&extras%5B24%5D=0&extras%5B25%5D=&extras%5B26%5D=&extras%5B27%5D=0&extras%5B28%5D=0&extras%5B29%5D=&submit=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8
    в котором есть такие символы §, ®, =¤

    сделать вот такой:

    Код:
    http://site.ru/list/?&category_id=15%C2%A7ion_id=1&subscribe_id=&filter_id=&mark_id=0&year%5B1%5D=1993&year%5B2%5D=&color_id=&price_usd%5B1%5D=100000&price_usd%5B2%5D=%C2%A4cy_key=RUR&body_key=&run%5B1%5D=&run%5B2%5D=&engine_key=0&engine_volume%5B1%5D=&engine_volume%5B2%5D=&drive_key=&engine_power%5B1%5D=&engine_power%5B2%5D=&transmission_key=0&used_key=5&wheel_key=&custom_key=1&available_key=1&change_key=1&owner_pts=&stime=2&country_id=1&has_photo=0%C2%AEion%5B%5D=87%C2%AEion_id=87&sort_by=2&city_id=1123&output_format=1&client_id=1&extras%5B1%5D=0&extras%5B2%5D=0&extras%5B3%5D=0&extras%5B4%5D=0&extras%5B5%5D=0&extras%5B6%5D=0&extras%5B7%5D=&extras%5B8%5D=0&extras%5B9%5D=0&extras%5B10%5D=0&extras%5B11%5D=0&extras%5B12%5D=&extras%5B13%5D=0&extras%5B14%5D=0&extras%5B15%5D=0&extras%5B16%5D=0&extras%5B17%5D=0&extras%5B18%5D=&extras%5B19%5D=&extras%5B20%5D=&extras%5B21%5D=&extras%5B22%5D=&extras%5B23%5D=0&extras%5B24%5D=0&extras%5B25%5D=&extras%5B26%5D=&extras%5B27%5D=0&extras%5B28%5D=0&extras%5B29%5D=&submit=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8
     
  2. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
     
  3. new_forward

    new_forward

    Регистр.:
    5 май 2008
    Сообщения:
    668
    Симпатии:
    44
    Не не получается... Если урл открыть в браузере и скопировать то получится второй вариант а urlencode делает не такие символы...
     
  4. Arqin

    Arqin

    Регистр.:
    17 мар 2009
    Сообщения:
    185
    Симпатии:
    37
    rawurlencode попробуйте. И, совет, смотрите полученные урлы сразу после преобразования. Иначе веб-сервера с ссылками всякие весёлые вещи вытворяют.
     
  5. Inviseble_Demon

    Inviseble_Demon

    Регистр.:
    11 дек 2008
    Сообщения:
    482
    Симпатии:
    350
    А разница в urlencode and rawurlencode случаем не только в "+" and "%20" ? Или у меня маны от индусов ?
     
  6. Inviseble_Demon

    Inviseble_Demon

    Регистр.:
    11 дек 2008
    Сообщения:
    482
    Симпатии:
    350
    new_forward
    А вы хотябы в курсе что это совершенно разные 2 ссылки ?
    [​IMG]
    То есть как видете между ?&category_id=15 и §ion_id=1&s есть ещё 1 символ ! "В"

    А вообще проблема у вас в том что вы скорее всего просто в наглую не думая сделали urlencode('ССЫЛКА'); и получили полного Г D Потому как и нужное и не нужное сконвертили.

    Вот немного говнокод но работает (почти всегда работает)

    PHP:
            $str='http://'.str_replace(
                array(
    '%3F''%26''%3D''%2F'),
                array(
    '?''&''=''/'),
                
    rawurlencode(
                    
    rawurldecode(
                        
    str_replace('http://',
                        
    '',
                        
    $str)
                    )
                )
            );