Строгое URL-кодирование для HTTP-ссылки «preconnect» <...> в PHPPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Строгое URL-кодирование для HTTP-ссылки «preconnect» <...> в PHP

Сообщение Anonymous »

Предполагая, что я просто хочу быть вежливым и создать это безопасным способом:

Код: Выделить всё

Link: ; rel="preconnect"
https://developer.mozilla.org/en-US/doc ... aders/Link
Предполагая, что в соответствии с Документация разработчиков 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
URlencode() также неверен, результат тот же (как и ожидалось):

Код: Выделить всё

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
Но, чтобы соблюдать стандарт, мне, вероятно, следует выполнить цикл chr() от нуля до 255, чтобы получить весь rawurlencode(chr(1..255)) восстановить их... так что это становится немного хакерским и излишним.
Текущий подход
Итак, пытаемся быть строгими в отношении «кодирования символов» коды больше 255", поэтому я попробовал зациклить каждый символ (/байт?) и запускать rawurlencode() только в том случае, если результат равен 255, и это работает хорошо:

Код: Выделить всё


Подробнее здесь: [url]https://stackoverflow.com/questions/78671273/strict-url-encode-for-http-link-preconnect-in-php[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»