Jump to content

Я нашел одну (две...) картинку, которую Компрессор не переводит в WEBP, почему?


Я нашел одну (две...) картинку, которую Компрессор не переводит в WEBP, почему?



Какие символы в адресе картинки URI/URL модуль Компрессор воспринимает как верные (валидные), а на какие не реагирует?
Это к вопросу

а почему модуль картинку
Код:
Doska заборнаяMPK,281,29.jpg

 

не преобразовал в WEBP?

Потому, что символы пробела, запятой и кириллица в принципе не должны быть в URI/URL. Эти символы могут быть в названии файла при использовании их внутри ОС Linux, Windows, но не могут быть в URI/URL согласно стандарту RFC3986. Согласно стандарту кроме латинских букв и цифр могут быть еще только следующие знаки в названии файла, передаваемом в URL :

Код:
- _ . ~

 

Все остальные символы URL (вроде той же кириллицы, арабской вязи и т.д. и т.п.) в названии файла (папки) должны быть обязательно закодированы. Процентно-кодированный символ представляет из себя символьный триплет, состоящий из знака "%" и следующих за ним двух шестнадцатеричных чисел.
Спецсимволы вроде : & ? и т.п. используются в URI/URL для специальных целей.

Вот так должно выглядеть название файла Doska заборнаяMPK,281,29.jpg в URI/URL:

Код:
Doska%2520%D0%B7%D0%B0%D0%B1%D0%BE%D1%80%D0%BD%D0%B0%D1%8FMPK%252C281%252C29.jpg

 

Т.е., как видите, никаких пробелов, запятых и кириллицы быть не должно в URL. Для картинок, которые обрабатывает движок получается именно такого вида URL. Если у вас это не так, то это значит, что, возможно, один из основополагающих механизмов движка поломан или намеренно изменен неграмотным образом. Или просто используется сторонний код, автор которого не предполагал, что в названии файла может быть помимо латиницы и цифр нечто иное. Вообще, в принципе использование в названиях файлов пробелов, кириллицы и т.д. - дело неблагодарное, т.к. это всегда приводит рано или поздно к некоторым неудобствам или неприятностям. Но в идеальном мире правильно URL-кодированные такие имена не должны приводить к проблемам.

Движок Opencart использует для кодирования "неправильных" символов функцию rawurlencode, которая как раз работает по стандарту RFC3986. Откуда тогда берутся на странице невалидные URI/URL (ссылки)? Из-за ошибок, когда ухитряются непонятными способами все же разместить в итоговом коде такие запрещенные стандартом URI/URL. Почему же браузер показывает изображения по таким неверным ссылкам? Потому, что браузеры научились исправлять многие ошибки, причем, даже нередко очень грубые ошибки. Но верно исправить ошибку браузер может не всегда и не везде, да и не любой браузер.
 

ВАЖНО IMPORTANT
Модуль Компрессор во избежании непредвиденных ситуаций не пытается обработать изображения со странными URL. Потому, что таких URL в исправном движке Opencart в принципе не должно быть.



Конечно, ничто не мешает пользователю руками вбить в код HTML какую-угодно ссылку. Но, как минимум, сам движок при обработке изображений дает для них валидный URL. Движок Opencart всегда работает по стандарту RFC3986. Модуль Компрессор тоже работает в полном соответствии с этим стандартом. Попытка обработки невалидных (не соответствующих стандарту) ссылок на изображения может привести к непредсказуемым коллизиям, глюкам и багам, а потому такая обработка не производится, сами невалидные ссылки не приветствуются, но и не мешают нормальной работе Компрессора, нестандартные ссылки просто игнорируются. Все это сделано ради повышения общего уровня надежности и стабильности работы сайта.

ИТОГ. Для внутреннего использования внутри операционной системы название файла может содержать самые разные символы, буквы различных алфавитов и определенные специальные символы. Но для внешнего использования (когда веб-сервер передает информацию в браузер) URL, в котором будут представлены подобные названия файлов, определенным образом кодируется.


×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.