Как правильно кодировать 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
Какую функцию я использую для кодирования, как во втором примере?
Ваши PHP-скрипты, похоже, используют некоторую однобайтовую кодировку. Вы также можете:
В целом, полное переключение на UTF-8 решает все проблемы с кодированием сразу, но для начальной миграции может потребоваться дополнительная работа.
Не существует «правильной» кодировки. URL-процентное кодирование просто представляет необработанные байты. Вам решать, что это за байты или как вы собираетесь их интерпретировать позже. Если ваша строка имеет кодировку UTF-8, процентное представление необработанного байта %C3%B8
, Если ваша строка не в кодировке UTF-8, это что-то еще. Если ты хочешь %C3%B8
, убедитесь, что ваша строка в кодировке UTF-8.
Используйте кодировку UTF-8
function url_encode($string){
return urlencode(utf8_encode($string));
}
Затем используйте эту функцию, чтобы закодировать ваш URL (получил это в комментарии здесь: http://php.net/manual/en/function.urlencode.php)