Кодировки данных

Что такое Unicode ? Это на самом деле изначальный стандарт , где всем имеющимся символам в мире присвоен уникальный код. Это основа. Мы будем пользоваться пока только двух байтовым вариантом , то есть на каждому символу присвоен 2 байтовый код XXXX.

Unicode это возможность писать текст (содержание страниц сайта) на любых китайских иероглифах , русском, армянском, еврейском языках ОДНОВРЕМЕННО на одной странице. То есть вы можете не знать арабский, но человек на вашем сайте может спокойно писать на нем и все будут видеть именно арабский.

фотка 1

Обратите внимание , что в значениях unicode есть нули (0). И это есть проблема, так как передавать по http протоколу нули это означает конец строки (кто помнит С язык поймет) никак нельзя.

Это главная причина почему появился UTF8. Что такое UTF8 ? Это упакованный вариант Unicode, где нет нулей и еще тут продумана одна идея, результатом которой UTF8 легко определяется по сырым данным. То есть есть нечто (каша кракозябр) и определить что это именно UTF8 намного проще чем большинство других кодировок.

Итак , что реально удобно использовать : первое это весь контент сайта в UTF8.

urlencoded

Ко всему прочему еще в GET запросах используется url кодирование. Это представление одного байта UTF8 в виде 3 байт %XY ('корова' = %D0%BA%D0%BE%D1%80%D0%BE%D0%B2%D0%B0). То есть объем передаваемых данных у вас увеличивается еще в почти 3 раза.

Почему браузеры при передачи GET запроса кодируют данные в %XY, а не передают как UTF8 я до конца не понял пока. Но наверное на это есть причины.
Если подумать , что такое ('корова' = %D0%BA%D0%BE%D1%80%D0%BE%D0%B2%D0%B0) , то станет понятно , что это только ASCII символы , цифры 0..9 и буквы только 'A..F' . И больше тут ничего не должно быть.

Вообще говоря браузер сам же и сообщает в заголовке , что он передает данные в urlencoded через параметр contentType (default: “application/x-www-form-urlencoded”). Хотя надо признать, что если указать contentType : "text/html; charset=utf-8", то ничего не изменится браузер все равно будет продолжать кодировать данные в %XY.

Разрабатывая контроллеры STM32 и http сервера на них пришлось въехать почему надо передавать данные кодируя urlencode (%D1%E1) ....


В принципе, допустимы также другие способы кодирования, например, escape/unescape функцию javascript. Слово "корова" в этом случае будет выглядеть как %u043A%u043E%u0440%u043E%u0432%u0430.

Может быть полезно для тестирования :

php://input возвращает все необработанные данные после HTTP заголовков запроса, независимо от типа контента.

$raw = file_get_contents('php://input');
echo " raw : \n ".$raw."  \n";

Программа postman не заменима для анализа пост запросов


фотка 2