кодирование — Как кодировать иностранные символы в URL в переполнении стека

Как правильно кодировать URL с иностранными символами в PHP?
Я предполагал, что urlencode () поможет, но это не так.

Правильная кодировка для следующего URL

http://eu.battle.net/wow/en/character/anachronos/Paddestøel/advanced

Это:

http://eu.battle.net/wow/en/character/anachronos/Paddest%C3%B8el/advanced

Но urlencode кодирует это так:

http://eu.battle.net/wow/en/character/anachronos/Paddest%F8el/advanced

Какую функцию я использую для кодирования, как во втором примере?

0

Решение

Ваши PHP-скрипты, похоже, используют некоторую однобайтовую кодировку. Вы также можете:

  • Сохранить исходный код как UTF-8
  • Конвертировать данные в UTF-8 с Iconv () или же mb_convert_encoding ()

В целом, полное переключение на UTF-8 решает все проблемы с кодированием сразу, но для начальной миграции может потребоваться дополнительная работа.

2

Другие решения

Не существует «правильной» кодировки. URL-процентное кодирование просто представляет необработанные байты. Вам решать, что это за байты или как вы собираетесь их интерпретировать позже. Если ваша строка имеет кодировку UTF-8, процентное представление необработанного байта %C3%B8, Если ваша строка не в кодировке UTF-8, это что-то еще. Если ты хочешь %C3%B8, убедитесь, что ваша строка в кодировке UTF-8.

2

Используйте кодировку UTF-8

function url_encode($string){
return urlencode(utf8_encode($string));
}

Затем используйте эту функцию, чтобы закодировать ваш URL (получил это в комментарии здесь: http://php.net/manual/en/function.urlencode.php)

1
По вопросам рекламы [email protected]