Добрый день! Как раскодировать и декодировать URL средствами PHP ? То есть перевести текст в 16-тиричную систему и наоборот. Функции urldecode, urlencode работают некорректно. Этот код : Код (Text): $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'; $decoded_url = urldecode($encoded_url); 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'); Не помогло
Чтобы это работало, входящая строка должна содержать специальную метку(BOM) кодировки. В однобайтных кодировках её нет, а в настройках PHP(mbstring.language) должен быть правильно указан язык распознавания. Попробуйте задать кодировку явно. Кроме того, похоже, что у вас входящая кодировка в UTF-8 без BOM, а внутренняя кодировка скрипта в cp1251. Но я не уверен.
Другими словами, проблема не в urldecode(), а в отображении декодированного. Строка в UTF-8, а страница выдается в cp1251 Либо воспользуйтесь, например iconv(), либо исправьте заголовок страницы в header()
Хм, видимо, я чего-то недопонимаю в этом вопросе, возможно, предложенное мной решение и правда костыль. Так, что если ваш редактор не задает заголовков, то решение предыдущего оратора верно, потому что правильно. Но мне всё еще сомнительно, потом разберусь.