PHP: Поддерживаемые кодировки символов — Manual

Change language: EnglishBrazilian PortugueseChinese (Simplified)FrenchGermanJapaneseRussianSpanishTurkishOther

Submit a Pull Request Report a Bug

В настоящее время модулем mbstring поддерживаются следующие кодировки символов. Любая из этих кодировок символов может быть указана в параметре encoding функций mbstring.

Следующие кодировки символов поддерживаются в этом модуле PHP:

  • UCS-4*
  • UCS-4BE
  • UCS-4LE*
  • UCS-2
  • UCS-2BE
  • UCS-2LE
  • UTF-32*
  • UTF-32BE*
  • UTF-32LE*
  • UTF-16*
  • UTF-16BE*
  • UTF-16LE*
  • UTF-7
  • UTF7-IMAP
  • UTF-8*
  • ASCII*
  • EUC-JP*
  • SJIS*
  • eucJP-win*
  • SJIS-win*
  • ISO-2022-JP
  • ISO-2022-JP-MS
  • CP932
  • CP51932
  • SJIS-mac (alias: MacJapanese)
  • SJIS-Mobile#DOCOMO (alias: SJIS-DOCOMO)
  • SJIS-Mobile#KDDI (alias: SJIS-KDDI)
  • SJIS-Mobile#SOFTBANK (alias: SJIS-SOFTBANK)
  • UTF-8-Mobile#DOCOMO (alias: UTF-8-DOCOMO)
  • UTF-8-Mobile#KDDI-A
  • UTF-8-Mobile#KDDI-B (alias: UTF-8-KDDI)
  • UTF-8-Mobile#SOFTBANK (alias: UTF-8-SOFTBANK)
  • ISO-2022-JP-MOBILE#KDDI (alias: ISO-2022-JP-KDDI)
  • JIS
  • JIS-ms
  • CP50220
  • CP50220raw
  • CP50221
  • CP50222
  • ISO-8859-1*
  • ISO-8859-2*
  • ISO-8859-3*
  • ISO-8859-4*
  • ISO-8859-5*
  • ISO-8859-6*
  • ISO-8859-7*
  • ISO-8859-8*
  • ISO-8859-9*
  • ISO-8859-10*
  • ISO-8859-13*
  • ISO-8859-14*
  • ISO-8859-15*
  • ISO-8859-16*
  • byte2be
  • byte2le
  • byte4be
  • byte4le
  • BASE64
  • HTML-ENTITIES (alias: HTML)
  • 7bit
  • 8bit
  • EUC-CN*
  • CP936
  • GB18030
  • HZ
  • EUC-TW*
  • CP950
  • BIG-5*
  • EUC-KR*
  • UHC (alias: CP949)
  • ISO-2022-KR
  • Windows-1251 (alias: CP1251)
  • Windows-1252 (alias: CP1252)
  • CP866 (alias: IBM866)
  • KOI8-R*
  • KOI8-U*
  • ArmSCII-8 (alias: ArmSCII8)

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

Любая запись в php.ini, которая принимает имя кодировки, может также использовать значения «auto» и «pass«. Функции mbstring, которые принимают имя кодировки, также могут использовать значение «auto«.

Если установлено значение «pass«, преобразование кодировки не производится.

Если установлено значение «auto«, оно расширяется списком кодировок, определённым в NLS (настройках национального языка). Например, если NLS установлен в Japanese, предполагается, что значение будет из списка «

ASCII,JIS,UTF-8,EUC-JP,SJIS«.

Смотрите также mb_detect_order()

add a note

User Contributed Notes 3 notes

up

down

10

akniep at rayo dot info

10 years ago

Use mb_list_encodings() to check if an encoding is supported by mbstring before using its functions for it.

up

down

4

Tomolimo (olivier dot moron at raynet-it dot com)

9 years ago

Apart of this list, GB2312 encoding is also supported.
It is Chinese Simplified encoding which is now superseded by GB18030, but GB2312 is not in the list.
If you try to us it, the result will allright even if it is not in the list.
Regards,
Tomolimo

up

down

3

Anonymous

8 years ago

CP850 (DOS-Latin-1) is also supported.

add a note

Как быстро изменить кодировку сайта, например, из windows-1251 в UTF-8 — Code Depth

Имеется сайт на PHP, существующий уже много-много лет. Сайт создавался и развивался в кодировке windows-1251, но дальше так жить невозможно, надо весь PHP-код преобразовать в UTF-8, то же самое сделать с html-, css-, js- и прочими файлами, сконвертировать базу данных MySQL и ещё кое-что подправить.

Как быстро выполнить переход сайта на кодировку UTF-8?

Нам помогут знания из статьи про recode и enconv, добавим к ним ещё кое-что.

Все действия можно свести в один bash-скрипт, отдельные части которого рассмотрим в статье.

1. Создать копию всех файлов сайта. Например, сайт находится в /var/www/site. Для работы сайта ещё используются /var/www/dir1, /var/www/dir2, /var/www/dir3, причём dir1 и dir2 надо перекодировать вместе с site, а dir3 не надо трогать. Скопируем всё в /var/www-u8. Для удобства будем использовать переменные, в которых сохраним часто используемые строки.

dir_source=’/var/www’

dir_u8=’/var/www-u8′

cp -R ${dir_source}/* ${dir_u8}

Массив, содержащий имена подкаталогов, в которых надо обработать файлы:

subdirs=(site dir1 dir2)

Во всех подкаталогах надо перекодировать из windows-1251 в UTF-8 все файлы с расширениями: php, txt, js, css, htm. Нам поможет enconv. Затем найти подстроки «windows-1251» или «cp1251» и заменить на «UTF-8». Наконец, найти в php-файлах короткий открывающий тег «<?» и заменить его на полный «<?php». Регулярное выражение для поиска короткого тега ищет строку ‘<?’, после которой следует пробел, конец строки или символ ‘=’ (для файлов, в которых php-код используется вперемешку с html для вставки значений переменных: ‘<?=$var;?>’). Все замены поможет выполнить могучий sed, а с подбором файлов для обработки отлично справится find. Поскольку обработку надо выполнить в нескольких подкаталогах (их имена хранятся в массиве $subdirs), то перебираем элементы массива в цикле (подробнее про использование массивов в bash) и из них составляем путь для поиска командой find.

for item in ${subdirs[*]}
do
  sPath=${dir_u8}/${item}
  find ${sPath} -iregex '.*\.\(txt\|php\|css\|js\|html?\)' -exec enconv -L russian -x utf8/LF '{}' \;
  find ${sPath} -iregex '.*\.\(txt\|php\|css\|js\|html?\)' -exec sed -i -r 's/windows-1251|cp1251/UTF-8/ig' '{}' \;
  find ${sPath} -iname '*\.php' -exec sed -i -r 's/(<\?)(\s|$|=)/<?php\2/ig' '{}' \;
done

С перекодировкой базы данных MySQL вообще всё просто. Надо сделать дамп данных, в области описания таблиц заменить строки, определяющие кодировку, загрузить дамп в новую в базу. Примерно так:

HOST_1='localhost'
USER_1='user1'
PASSWORD_1='password1'
DATABASE_1='database1'
HOST_2='localhost'
USER_2='user2'
PASSWORD_2='password2'
DATABASE_2='database2'
DUMPFILE_1="db-${DATABASE_1}.sql"
DUMPFILE_2="db-${DATABASE_2}.sql"
# dump from the original DB
mysqldump -u ${USER_1} -h ${HOST_1} -p${PASSWORD_1} --opt ${DATABASE_1} > ${DUMPFILE_1}
# Replace charset settings from cp1251 to utf8
sed -r 's/CHARSET=cp1251/CHARSET=utf8/ig' ${DUMPFILE_1} > ${DUMPFILE_2}
# Load data from the dump
mysql -u ${USER_2} -h ${HOST_2} -p${PASSWORD_2} ${DATABASE_2} < ${DUMPFILE_2}

В скрипте все переменные, имена которых оканчиваются на «1», относятся к исходной базе данных, работающей в кодировке cp1251. Все переменные, имена которых оканчиваются на «2», относятся к новой базе данных, которая будет использоваться в перекодированном в utf-8 сайте.

Осталось установить для файлов в ${dir_u8} нужные права доступа, при необходимости настроить контекст безопасности SELinux и, наконец, настроить вебсервер для визуальной проверки перекодированного сайта.

Если свести воедино все фрагменты bash-скрипта, написанные на этой странице, то, фактически, весь процесс изменения кодировки сайта на utf-8 окажется простым и быстрым.

Понравилось это:

Нравится Загрузка…

кодировок символов для начинающих | phpGrid

Кодировка символов определяет, как символы перемещаются из баз данных в веб-браузеры и обратно. Он имеет долгую и извилистую историю символов и их кодирования.

Байт и символ

Байт состоит из 8 бит, которые могут представлять 256 различных значений. Этого более чем достаточно для всех английских символов плюс дополнительные цифры, распространенные знаки препинания, пробелы, табуляции и другие управляющие символы. Кодировка символов ASCII стала 8-битным стандартом кодирования символов для электронной связи с 19 века. 60-е годы.

Однако, поскольку многие неанглийские языки содержат более 256 символов, например корейский (более 11 000 символов) и китайский (более 40 000 символов), невозможно втиснуть много символов в один байт. Чтобы содержать неанглийские символы, символ должен состоять из одного или нескольких байтов.

Unicode — новый набор символов C

S tandards

В конце 1980-х годов был разработан новый стандарт — Unicode — современная система кодирования, которая может производить более миллиона кодовых точек, что более чем достаточно для учета каждого символа в любой язык. Юникод — это новый универсальный стандарт для кодирования всех человеческих языков. Он даже включает смайлики.

Юникод — это стандарт символов, а не кодировка символов. Компьютерам нужен способ перевода Unicode в двоичный код, чтобы хранить его в текстовых файлах. Здесь на помощь приходит UTF-8.

Кодировка UTF-8

UTF-8 — это система кодирования для Unicode. UTF-8 использует креативный многобайтовый метод кодирования с переменной шириной для экономии места при размещении многобайтовых символов. В UTF-8 некоторые символы, такие как X , занимают всего 1 байт, а некоторые символы, такие как emoji 😄 может занимать до 4.

Лучше всего то, что UTF-8 обратно совместим с ASCII.

Существует три различных варианта кодировки символов Unicode: UTF-8, UTF-16 и UTF-32. Из этих трех. phpGrid уже использует кодировку символов UTF-8 для всех демонстраций в Demo Explorer. Фактически, Для веб-контента следует использовать только кодировку UTF-8.

Поскольку HTML-страница может быть только в одной кодировке, кодировка на основе Unicode, такая как UTF-8, может поддерживать многие языки и вмещать страницы и формы в любом сочетании этих языков (источник: w3.org).

Что делать веб-разработчику?

На момент написания этой статьи UTF-8 используется на 96,4% всех веб-сайтов, чья кодировка нам известна.

Веб-страница должна содержать следующие разделы >

говорит браузеру использовать кодировку символов utf-8 при переводе машинного кода в человекочитаемый текст и наоборот для отображения в браузере.

Хорошей новостью является то, что кодировка символов по умолчанию, используемая в HTML5, уже является UTF-8. Включите следующие

1

автоматически объявляет, что ваши веб-файлы -8, если иное не указано в вышеупомянутом мета-элементе.

Только помните, что для веб-контента следует использовать только кодировку UTF-8… И удачной кодировки!

Рекомендуемое чтение:
https://www.w3.org/International/questions/qa-choosing-encodings

ASCIIMetaUnicodeUTF-8

Как унифицировать кодировку текстового файла в utf-8 в PHP| LearningBOX

Я Нисимура, создатель QuizGenerator, и я работаю над ним с момента выпуска версии 2. 0. На самом деле я не участвовал в ранней разработке LearningBOX, но начал участвовать в ней с выхода версии 2.0. На этот раз я собираюсь принять участие в разработке Обработка кодов символов Я подумал, что должен немного больше рассказать о кодах символов, поэтому написал об этом статью.
В этой статье. Как унифицировать кодировку текстовых файлов в utf-8 в PHP Мы рады представить вам следующее. Мы надеемся, что вам понравится эта статья так же, как и нам.

Содержание

  • 1. Shift-JIS неизбежен.
  • 2. как избежать искажения текста
  • 3. как определить код символа?
  • 4. Резюме

 

Shift-JIS неизбежен.

Такие системы, как LearningBOX и QuizGenerator, могут получать текстовые файлы, такие как CSV. В современной веб-системе вы должны использовать utf-8 в качестве кода символа текстового файла, и вы не хотите принимать какой-либо другой код символа, но на практике Shift_JIS файлы редко часто Он будет загружен и заявлено как неисправность.
Итак, в QuizGenerator Shift_JIS файлы конвертируются в utf-8 и далее процесс продолжается.

Что такое Shift-JIS?

Shift Код JIS — это один из кодов символов для различных символов, включая японский, которые были стандартизированы как стандарт JIS. Это улучшенная версия кода JIS, и в то время как код JIS использует 7 бит для представления символов, код Shift JIS использует 2 байта (16 бит) для представления всех символов.

 

Я не доверяю mb_convert_encoding.


В PHP есть функция mb_convert_encoding, которая может преобразовывать код символов. На первый взгляд кажется, что эта функция может определить код символа и преобразовать его в utf-8 только с помощью этой функции, но на самом деле эта функция не заслуживает доверия.

mb_convert_encoding(«ah», «utf-8», «utf-8, sjis-win» ), то если «ah» это utf-8, то его нужно преобразовать в utf-8 как есть, а если это Shift_JIS , его следует преобразовать в utf-8 (по крайней мере, что касается официальной документации). На самом деле, они делают чертовски много вещей.
Если вы возьмете строку, переданную в utf-8, и заставите ее интерпретироваться как Shift_JIS, сломаете ее и преобразуете в utf-8, вы получите непонятное значение.

 

Как избежать искажения текста


Если указать исходный код символа, mb_convert_encoding будет работать корректно.
mb_convert_encoding работает правильно, пока вы указываете код исходного символа. Другими словами, конвертировать из Shift_JIS в utf-8 только в случае с Shift_JIS и ничего не делать в случае с utf-8, что в принципе работает.

mb_convert_encoding(«ah», «utf-8», «sjis-win»)
Приведенный выше код будет работать нормально, если «Ahhh» равно Shift_JIS. В случае с utf-8 можно использовать как есть.

 

Как определить код символа?

Существует функция mb_detect_encoding, которая, если она работает правильно, может быть решена просто с помощью mb_convert_encoding.

Если стандартная функция не работает, вам придется делать это самостоятельно.

Просто сделайте это, потому что не так сложно определить, соответствуете ли вы спецификации utf-8.

 

А если не utf-8?

Если это не utf-8, ・・・・ рассматривать его как Shift_JIS. Я не могу поддерживать это, пока кто-нибудь не поднимет файлы euc-jp или utf-16. По крайней мере, люди, которые это делают, должны знать о кодировке, поэтому, пожалуйста, занимайтесь самообслуживанием. Я не могу поддерживать людей, которые хотят использовать файлы euc-jp или utf-16.

 

Еще одна ловушка.

Я много раз использовал термин Shift_JIS в этой статье, но то, что сейчас называется Shift_JIS, является расширением Shift_JIS Windows-31J (MS932) Часто бывает так, что
Однако, если вы укажете Shift_JIS в PHP, все символы, кроме указанных в исходной спецификации Shift_JIS, будут искажены. Если у вас нет особой причины, используйте Windows-31J или sjis-win вместо Shift_JIS.