Как кодировать URL-адреса только не-ASCII-символы URL в PHP, но оставлять зарезервированные символы незакодированными?

У меня есть такой URL (обратите внимание на символы «„):

http://tinklarastis.omnitel.lt/kokius-aptarnavimo-kanalus-klientui-siulo-„omnitel «-1494

Я получаю это от синтаксического анализатора SimplePie, если это имеет значение. Теперь, если вы попытаетесь перейти по этому конкретному URL-адресу в своем браузере и скопировать его из адресной строки, вы получите URL-адрес, содержащий не-ASCII-символы в процентах закодированные:

http://tinklarastis .omnitel.lt/kokius-aptarnavimo-kanalus-klientui-siulo-%E2%80%9Eomnitel%E2%80%9C-1494

Я пытаюсь понять, как мне имитировать такое же преобразование в PHP. Я не могу просто использоватьurlencode()илиurlrawencode() , поскольку они кодируют как не-ASCII-символы , так и зарезервированные символы, в то время как в моем случае зарезервированные символы (/ ?& и т. д.) должны оставаться такими, какие они есть.

До сих пор я видел только решений, которые включают разбиение URL на части между зарезервированными символами и последующее использование urlencode(), но мне это кажется хакерским, и я надеюсь, что есть более элегантное решение. Я пробовал различные варианты iconv(), mb_convert_encoding(), но пока безуспешно.

12
задан Community 23 May 2017 в 10:31
поделиться