За последние 24 часа нас посетили 102265 программистов и 5656 роботов. Сейчас ищет 2471 программист ...

ํНужно раскодировать и декодировать URL

Тема в разделе "PHP для новичков", создана пользователем Seoleo, 1 окт 2023.

  1. Seoleo

    Seoleo Активный пользователь

    С нами с:
    5 мар 2019
    Сообщения:
    6
    Симпатии:
    0
    Добрый день!

    Как раскодировать и декодировать URL средствами PHP ? То есть перевести текст в 16-тиричную систему и наоборот.

    Функции urldecode, urlencode работают некорректно.

    Этот код :

    Код (Text):
    1. $encoded_url = 'https%3A%2F%2Fexample.com%2Fpage.php%3Fname%3D%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9';
    2.  
    3. $decoded_url = urldecode($encoded_url);
    4.  
    5.    echo $decoded_url;    
    Выдаёт такую строку:
    https://example.com/page.php?name=Р СѓСЃСЃРєРёР№

    А должен выдавать такую строку:
    https://example.com/page.php?name=Русский

    Страница имеет кодировку UTF-8.

    Также пробовал преобразовывать в UTF-8 строку, таким образом :
    $decoded_url = mb_convert_encoding($decoded_url, 'UTF-8', 'auto');

    Не помогло
     
  2. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Чтобы это работало, входящая строка должна содержать специальную метку(BOM) кодировки. В однобайтных кодировках её нет, а в настройках PHP(mbstring.language) должен быть правильно указан язык распознавания.
    Попробуйте задать кодировку явно.
    Кроме того, похоже, что у вас входящая кодировка в UTF-8 без BOM, а внутренняя кодировка скрипта в cp1251.
    Но я не уверен.
     
    #2 Drunkenmunky, 1 окт 2023
    Последнее редактирование: 1 окт 2023
  3. Seoleo

    Seoleo Активный пользователь

    С нами с:
    5 мар 2019
    Сообщения:
    6
    Симпатии:
    0
    К сожалению не понимаю как это делать.
     
  4. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Другими словами, проблема не в urldecode(), а в отображении декодированного.
    Строка в UTF-8, а страница выдается в cp1251
    Либо воспользуйтесь, например iconv(), либо исправьте заголовок страницы в header()
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.834
    Симпатии:
    1.335
    Адрес:
    Лень
    https://onlinephp.io/c/c8a16

    меняй кодировку скрипта (файла) на UTF-8


    нахрена ты костыли советуешь ?
     
  6. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Латиница в UTF-8 как-то по-другому выглядит?
    Так чего ему там менять-то?
     
  7. Seoleo

    Seoleo Активный пользователь

    С нами с:
    5 мар 2019
    Сообщения:
    6
    Симпатии:
    0
    Спасибо! Заработало нормально, после того как весь PHP файл пересоздал в кодировке UTF-8
     
  8. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Чем пересоздавали?
     
  9. Seoleo

    Seoleo Активный пользователь

    С нами с:
    5 мар 2019
    Сообщения:
    6
    Симпатии:
    0
    Текстовым редактором Bred.
     
  10. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Хм, видимо, я чего-то недопонимаю в этом вопросе, возможно, предложенное мной решение и правда костыль.
    Так, что если ваш редактор не задает заголовков, то решение предыдущего оратора верно, потому что правильно. Но мне всё еще сомнительно, потом разберусь.