Лекция 9:

Кодировки текста

< Лекция 8 || Лекция 9: 12

Юникод (Unicode) - универсальные кодировки UTF 8, 16 и 32

Тысячи знаков языковой группы юго-восточной Азии никак невозможно было описать в одном байте информации, который выделялся для кодирования символов в расширенных версиях ASCII. В результате был создан консорциум под названием Юникод (Unicode - Unicode Consortium) при сотрудничестве многих лидеров IT индустрии (те, кто производит софт, кто кодирует железо, кто создает шрифты), которые были заинтересованы в появлении универсальной кодировки текста.

Первой вариацией, вышедшей под эгидой консорциума Юникод, была UTF 32. Цифра в названии кодировки означает количество бит, которое используется для кодирования одного символа. 32 бита составляют 4 байта информации, которые понадобятся для кодирования одного единственного знака в новой универсальной кодировке UTF.

В результате развития Юникода появилась UTF-16, которая получилась настолько удачной, что была принята по умолчанию как базовое пространство для всех символов, которые у нас используются. Она использует два байта для кодирования одного знака.

для удовлетворения всех и вся в консорциуме Unicode было решено придумать кодировку переменной длины. Ее назвали UTF-8. Несмотря на восьмерку в названии, она действительно имеет переменную длину, т.е. каждый символ текста может быть закодирован в последовательность длиной от одного до шести байт.

На практике же в UTF-8 используется только диапазон от одного до четырех байт, потому что за четырьмя байтами кода ничего уже даже теоретически не возможно представить. Все латинские знаки в ней кодируются в один байт, так же как и в старой доброй ASCII.

Многобайтовые кодировки

Что значит многобайтовая кодировка? Это означает, что на один символ может выделяться больше чем один байт. Ведь действительно, все символы представлены байтами, чтобы закодировать символ потребуется некоторое их количество и одного может и не хватить. Особенно это касается необычных символов и букв каких-либо языков. Поэтому многобайтовые кодировки нужны, их поддержка конечно же есть в PHP.

Есть функции, которые способны самостоятельно определять кодировку текста. Также в них можно самому указать нужную кодировку при необходимости. Существует часть функций, которые начинаются с префикса mb_. Они специально предназначены для работы с текстом, mb значит многобайтовость.

Посмотрим, какие есть основные функции mb в PHP, ниже приводятся только самые используемые:

  • mb_convert_case - производит смену регистра символов в строке,
  • mb_convert_encoding - преобразует кодировку символов,
  • mb_detect_encoding - определение кодировки символов,
  • mb_internal_encoding - установка или получение внутренней кодировки скрипта,
  • mb_ord - получает кодовую точку символа,
  • mb_split - разделение строк в многобайтных кодировках, используя регулярное выражение,
  • mb_strcut - получение части строки,
  • mb_stripos - регистронезависимый поиск позиции первого вхождения одной строки в другую,
  • mb_strlen - получает длину строки,
  • mb_strpos - поиск позиции первого вхождения одной строки в другую,
  • mb_strripos - поиск последнего вхождения одной строки в другую, нечувствительный к регистру,
  • mb_strrpos - поиск позиции последнего вхождения одной строки в другую,
  • mb_strstr - находит первое вхождение подстроки в строке,
  • mb_strtolower - приведение строки к нижнему регистру,
  • mb_strtoupper - приведение строки к верхнему регистру,
  • mb_substr - возвращает часть строки.

Таким образом, для работы с текстом лучше всего использовать многобайтовые кодировки. Они позволяют правильно осуществлять операции с символами.

Передача данных через почтовый протокол: base64

Base64 - стандарт кодирования двоичных данных при помощи только 64 символов ASCII. Алфавит кодирования содержит текстово-цифровые латинские символы A-Z, a-z и 0-9 (62 знака) и 2 дополнительных символа, зависящих от системы реализации. Каждые 3 исходных байта кодируются 4 символами (увеличение на /frac{1}{3}).

Эта система широко используется в электронной почте для представления бинарных файлов в тексте письма (транспортное кодирование).

Применение в веб-приложениях

Кодирование Base64 может быть полезно, если в окружении HTTP используется информация, длину которой можно точно определить. Также многим приложениям необходимо кодировать двоичные данные для удобства включения в URL, скрытые поля форм, и здесь Base64 удобно не только для компактного представления, но и относительной нечитаемостью для попытки выяснения случайным человеком наблюдателем природы данных.

Использование URL-кодировщика над стандартом Base64, несмотря на это, неудобно, так как он преобразует символы / и + в специальные шестнадцатеричные последовательности. Если позднее эта строка используется вместе с базой данных или через гетерогенные системы, они прекращают работу на символе %, сгенерированном URLкодировщиком (потому что символ % также используется в ANSI SQL как шаблон).

По причине этого существует изменённый Base64 для URL, где не используется заполнение символом = и символы + и / соответственно заменяются на * и -, так что использование кодеров/декодеров URL перестаёт быть необходимым и не имеет никакого воздействия на длину закодированного значения, оставляя ту же самую закодированную форму, неповреждённую для использования в реляционных базах данных, веб-формах и идентификаторах объекта вообще. Стандартом Base64-кодирования URL адресов признается вариант, когда символы + и / заменяются, соответственно, на - и _.

Другой вариант называется изменённый Base64 для регулярных выражений, использует ! и - вместо * и -, для того, чтобы заменить стандартный Base64 +/, потому что оба + и * могут быть зарезервированы для регулярных выражений (отметим, что [], используемый выше в IRCu варианте, может не работать в этом контексте).

Имеются другие варианты, которые используют _ и - или . и _, если строка Base64 должна быть использована вместе с идентификаторами для программ, или . и - для использования в токенах имён XML (Nmtoken), или _ и : в более ограниченных идентификаторах XML (Name). В некоторых случаях для URL применяется Base58, который не использует символы + и /.

< Лекция 8 || Лекция 9: 12
Алина Бёрнс
Алина Бёрнс
Ксения Птицына
Ксения Птицына

Когда можно будет пройти итоговую аттестацию