Код: Выделить всё
Link: ; rel="preconnect"
Предполагая, что в соответствии с Документация разработчиков Mozilla:
URI (абсолютный или относительный) должен кодировать коды символов больше 255:
Вопрос:
Как бы вы «кодировали коды символов больше 255» в PHP?
Я не ищу что-то, что «работает», мне бы хотелось что-то, что соответствует стандарту (поскольку в Интернете «мы» стараемся быть снисходительными в отношении того, что я принимаю, и жесткими в отношении того, что я даю).
Спасибо. за любую помощь по PHP.
Примеры счетчиков
Rawurlencode() (который следует за RFC 3986) неверен, поскольку он экранирует : и /:
Код: Выделить всё
echo rawurlencode('https://example.com/苗条');
Код: Выделить всё
https%3A%2F%2Fexample.com%2F%E8%8B%97%E6%9D%A1
Код: Выделить всё
echo urlencode('https://example.com/苗条');
Код: Выделить всё
https%3A%2F%2Fexample.com%2F%E8%8B%97%E6%9D%A1
Я могу просто использовать rawurlencode(), а затем восстановить некоторые символы. Что-то вроде:
Код: Выделить всё
echo str_replace(['%3A', '%2F', '%3C', '%3E'], [':', '/', ''], rawurlencode('https://example.com/苗条'));
Код: Выделить всё
https://example.com/%E8%8B%97%E6%9D%A1
Текущий подход
Итак, пытаемся быть строгими в отношении «кодирования символов» коды больше 255", поэтому я попробовал зациклить каждый символ (/байт?) и запускать rawurlencode() только в том случае, если результат равен 255, и это работает хорошо:
Код: Выделить всё
Подробнее здесь: [url]https://stackoverflow.com/questions/78671273/strict-url-encode-for-http-link-preconnect-in-php[/url]