Что такое код iconv_get_encoding

iconv_get_encoding

(PHP 4 >= 4.0.5, PHP 5)

iconv_get_encoding — Возвращает значение внутренних переменных расширения

Описание

Возвращает текущее значение указанной внутренней переменной, и FALSE в случае ошибки.

Возможные значения необязательного параметра type:

  • all
  • input_encoding
  • output_encoding
  • internal_encoding

Если type не указан, или равен «all», iconv_get_encoding() вернёт массив со сначениями всех переменных.

Пример #1 Пример использования iconv_get_encoding()

Результат выполнения приведенных выше команд:

iconv C API: преобразование набора символов из/в локальную кодировку

Я использую API iconv C, и я хочу, чтобы iconv обнаружил локальную кодировку компьютера. Это возможно? По-видимому, это потому, что, когда я смотрю в исходном коде, я обнаруживаю в файле iconv_open1.h, что если переменные fromcode или tocode являются пустыми строками ( «» ), то локальная кодировка используется с использованием locale_charset() функции locale_charset() .

Кто-то также сказал мне, что для преобразования кодировки locale в unicode мне нужно было использовать iconv_open («UTF-8», «»)

К сожалению, я не упоминаю об этом в документации.

И когда я конвертирую некоторый текст iso-8859-1 в кодировку локали (которая является utf-8 на моей машине), то во время преобразования я получаю errno = EILSEQ (незаконная последовательность). Я проверил, и iconv_open не вернул ошибку.

Если вместо пустой строки в iconv_open указывать «utf-8» , то я не получаю ошибки. Очевидно, iconv не смог обнаружить мою текущую кодировку.

edit: Я проверил с помощью простой C-программы, которая puts(nl_langinfo(CODESET)) и я получаю ANSI_X3.4-1968 (это ASCII). По-видимому, у меня возникла проблема с обнаружением набора символов.

Дополнительная информация: моя программа написана в Ada, и я привязываю к link-time функции C. По-видимому, установка локали не инициализируется таким же образом во время исполнения Ada и C.

Iconv_mime_encode подтверждает уже установленные кодировки?

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

Результат был utf8, когда я хотел iso-8859-1.

Здесь результат в порядке, но я подумал, что не нужно явно задавать кодировку вывода.
Я не прав или это ошибка php?

Решение

Это выглядит очень неправильно, но это задокументировано : Если вы не установите output-encoding в preferences массив, он возвращается к iconv.internal_encoding , вместо iconv.output_encoding ,

Глядя через iconv функции , похоже, что все они используют внутреннюю кодировку в качестве запасного значения; ни один из них не использует выходную кодировку.

Кстати, с PHP 5.6 все iconv.*_encoding настройки устарели , default_charset вместо этого будет использоваться настройка по умолчанию.

Другие решения

Как вы можете прочитайте в руководстве , по умолчанию для выходной кодировки в iconv_mime_encode является iconv.internal_encoding не iconv.output_encoding ,

output-charset string Указывает набор символов, который будет использоваться для составления заголовка MIME. iconv.internal_encoding UTF-8

КСТАТИ: все 3 настройки осуждается в PHP 5.6

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

В чем разница между iconv () и mb_convert_encoding () в PHP?

В чем разница между iconv() и mb_convert_encoding() в PHP? Работает ли лучше, быстрее и т. Д. (Например, с конкретными кодировками)? В каких ситуациях предпочтительнее других?

Вот что я думаю, что знаю уже:

Iconv ()

  1. включается в большинство установок PHP.
  2. когда символы, которые не могут быть сопоставлены с новым набором символов, найдены, вы можете указать, были ли они преобразованы в «аналогичный» символ или проигнорированы.

mb_convert_encoding ()

  1. обычно требуется установка расширения php-mbstring.
  2. способен обрабатывать HTML-ENTITIES , конвертировать в и из шестнадцатеричных кодов веб-сайтов.

Существуют ли другие различия?

Илон Маск рекомендует:  Что такое код mcrypt_module_is_block_algorithm

iconv() – это просто оболочка вокруг функции iconv() которая находится в библиотеке системы C, где работает PHP (если PHP не создан с помощью GNU iconv, в этом случае используется GNU iconv). Таким образом, производительность и функции iconv() зависят от того, где вы работаете PHP и как он построен.

Реализация mb_convert_encoding() , с другой стороны, включена в исходный код PHP (модуля). Он включает библиотеку под названием libmbfl, которая обрабатывает фактическое преобразование. Таким образом, он работает одинаково независимо от того, где вы используете PHP. Ниже приведен список поддерживаемых кодировок: http://php.net/manual/en/mbstring.encodings.php

Итак, в целом, я думаю, вы могли бы сказать, что mb_convert_encoding() более надежно использовать, если вы хотите поддерживать разные платформы. Однако, если вы используете iconv() в Linux (например), то он поддерживает намного больше кодировок (см. iconv —list ).

Очевидно, относительная производительность функций также зависит от конкретной реализации iconv() .

С PHP 5.4 появляется ошибка. Иногда iconv возвращает пустую строку вместо того, чтобы возвращать строку с похожим символом.

Поэтому вы должны использовать mb_convert_encoding.

iconv_get_encoding

(PHP 4 >= 4.0.5, PHP 5, PHP 7)

iconv_get_encoding — Retrieve internal configuration variables of iconv extension

Description

Retrieve internal configuration variables of iconv extension.

Parameters

The value of the optional type can be:

  • all
  • input_encoding
  • output_encoding
  • internal_encoding

Return Values

Returns the current value of the internal configuration variable if successful or FALSE on failure.

If type is omitted or set to «all», iconv_get_encoding() returns an array that stores all these variables.

Examples

Example #1 iconv_get_encoding() example

Определение кодировки текста в PHP вместо mb_detect_encoding

Существует несколько кодировок символов кириллицы.

При создании сайтов в Интернете обычно используют:

  • utf-8
  • windows-1251
  • koi8-r

Еще популярные кодировки:

  • iso-8859-5
  • ibm866
  • mac-cyrillic

Вероятно это не весь список, это те кодировки с которыми я часто сталкиваюсь.

Иногда появляется необходимость определить кодировку текста. И в PHP даже функция для этого есть:

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

Недавно решил переписать проект где использовал эту функцию, нашел готовый пакет на packagist.org cnpait/detect_encoding, в котором кодировка определяется методом m00t

При этом указанный пакет был установлен более 1200 раз, значит не у меня одного периодически возникает задача определения кодировки текста.

Мне бы установить этот пакет и успокоиться, но я решил «заморочиться».

В общем, сделал свой пакет: onnov/detect-encoding.

Как его использовать написано в README.md

А о его тестировании и сравнении с пакетом cnpait/detect_encoding напишу.

Методика тестирования

Берем большой текст: Tolstoy — Anna Karenina
Всего — 1’701’480 знаков

Убираем все лишнее, оставляем только кириллицу:

Осталось 1’336’252 кирилистических знаков.

В цикле берем часть текста (5, 15, 30,… символов) преобразуем в известную кодировку и пытаемся определить кодировку скриптом. Затем сравниваем правильно или нет.

Вот таблица в которой слева кодировки, сверху количество символов по которому определяем кодировку, в таблице результат достоверности в %%

letters -> 5 15 30 60 120 180 270
windows-1251 99.13 98.83 98.54 99.04 99.73 99.93 100.0
koi8-r 99.89 99.98 100.0 100.0 100.0 100.0 100.0
iso-8859-5 81.79 99.27 99.98 100.0 100.0 100.0 100.0
ibm866 99.81 99.99 100.0 100.0 100.0 100.0 100.0
mac-cyrillic 12.79 47.49 73.48 92.15 99.30 99.94 100.0

Наихудшая точность с мак-кириллицей, вам нужно как минимум 60 символов, чтобы определить эту кодировку с точностью 92,15%. Кодировка Windows-1251 также имеет очень низкую точность. Это связано с тем, что номера их символов в таблицах сильно пересекаются.

К счастью, кодировки mac-cyrillic и ibm866 не используются для кодирования веб-страниц.

Попробуем без них:

letters -> 5 10 15 30 60
windows-1251 99.40 99.69 99.86 99.97 100.0
koi8-r 99.89 99.98 99.98 100.0 100.0
iso-8859-5 81.79 96.41 99.27 99.98 100.0

Точность определения высока даже в коротких предложениях от 5 до 10 букв. А для фраз из 60 букв точность определения достигает 100%. А еще, определение кодировки выполняется очень быстро, например, текст длиной более 1 300 000 символов кириллицы проверяется за 0.00096 секунд. (на моем компьютере)

А какие результаты покажет статистический способ описанный m00t:

letters -> 5 10 15 30 60
windows-1251 88.75 96.62 98.43 99.90 100.0
koi8-r 85.15 95.71 97.96 99.91 100.0
iso-8859-5 88.60 96.77 98.58 99.93 100.0

Как видим результаты определения кодировки хорошие. Скорость работы скрипта высокая, особенно на коротких текстах, на огромных текстах скорость значительно уступает. Текст длиной более 1 300 000 символов кириллицы проверяется за 0.32 секунд. (на моем компьютере).

Как: Определить и Изменить Кодировку Файла

Linux администраторы, работающие с веб-хостингом, знают насколько важно хранить html документы в правильной кодировке.

Из этой статьи вы узнаете, как определить кодировку файла из командной строки в Linux.

А также, вы познакомитесь с лучшим решением для конвертации текста между различными кодировками.

Дополнительно я приведу примеры конвертации текста между такими наиболее распространенными кодировками, как CP1251 (Windows-1251, Кириллица), UTF-8 , ISO-8859-1 и ASCII .

Дельный Совет: Хотите видеть родной язык в Linux терминале? Просто поменяйте локаль! Читать далее →

Определить Кодировку Файла

Используйте следующую команду, чтобы узнать какая кодировка используется в файле:

Опция Описание
-b , —brief Не печатать имя файла (краткий режим)
-i , —mime Определить тип файла и кодировку

Определить кодировку файлы in.txt :

Изменить Кодировку Файла

Используйте следующую команду для изменения кодировки файла:

Опция Описание
-f , —from-code Изменить с кодировки
-t , —to-code Изменить на кодировку
-o , —output Сохранить результат в файл

Изменить кодировку файла с CP1251 (Windows-1251, Кириллица) на UTF-8 :

Изменить кодировку файла с ISO-8859-1 на UTF-8 и сохранить результат в out.txt :

Изменить кодировку файла с ASCII на UTF-8 :

Изменить кодировку файла с UTF-8 на ASCII :

Illegal input sequence at position: Поскольку UTF-8 может содержать символы которые не конвертируются в ASCII, iconv будет генерировать сообщение об ошибке «Illegal input sequence at position«, пока вы не скажете пропускать все неконвертируемые в ASCII символы, с помощью опции -c .

Опция Описание
-c Исключить из вывода недопустимые символы

Вы можете потерять символы: Обратите внимание, что используя iconv с опцией -c некоторые символы могут быть потеряны.

В частности, это касается Windows машин с Кириллицей.

Вы скопировали какой-то файл с Windows в Linux, но при его открытии в Linux, вы видите “Êàêèå-òî êðàêîçÿáðû” – Что за … !?

Без паники — подобные строки могут быть быть легко преобразованы из кодировки CP1251 (Windows-1251, Кириллица) в UTF-8 с помощью:

hakre / iconv-l.txt

ANSI_X3.4-1968 ANSI_X3.4-1986 ASCII CP367 IBM367 ISO-IR-6 ISO646-US ISO_646.IRV:1991 US US-ASCII CSASCII
UTF-8
ISO-10646-UCS-2 UCS-2 CSUNICODE
UCS-2BE UNICODE-1-1 UNICODEBIG CSUNICODE11
UCS-2LE UNICODELITTLE
ISO-10646-UCS-4 UCS-4 CSUCS4
UCS-4BE
UCS-4LE
UTF-16
UTF-16BE
UTF-16LE
UTF-32
UTF-32BE
UTF-32LE
UNICODE-1-1-UTF-7 UTF-7 CSUNICODE11UTF7
UCS-2-INTERNAL
UCS-2-SWAPPED
UCS-4-INTERNAL
UCS-4-SWAPPED
C99
JAVA
CP819 IBM819 ISO-8859-1 ISO-IR-100 ISO8859-1 ISO_8859-1 ISO_8859-1:1987 L1 LATIN1 CSISOLATIN1
ISO-8859-2 ISO-IR-101 ISO8859-2 ISO_8859-2 ISO_8859-2:1987 L2 LATIN2 CSISOLATIN2
ISO-8859-3 ISO-IR-109 ISO8859-3 ISO_8859-3 ISO_8859-3:1988 L3 LATIN3 CSISOLATIN3
ISO-8859-4 ISO-IR-110 ISO8859-4 ISO_8859-4 ISO_8859-4:1988 L4 LATIN4 CSISOLATIN4
CYRILLIC ISO-8859-5 ISO-IR-144 ISO8859-5 ISO_8859-5 ISO_8859-5:1988 CSISOLATINCYRILLIC
ARABIC ASMO-708 ECMA-114 ISO-8859-6 ISO-IR-127 ISO8859-6 ISO_8859-6 ISO_8859-6:1987 CSISOLATINARABIC
ECMA-118 ELOT_928 GREEK GREEK8 ISO-8859-7 ISO-IR-126 ISO8859-7 ISO_8859-7 ISO_8859-7:1987 ISO_8859-7:2003 CSISOLATINGREEK
HEBREW ISO-8859-8 ISO-IR-138 ISO8859-8 ISO_8859-8 ISO_8859-8:1988 CSISOLATINHEBREW
ISO-8859-9 ISO-IR-148 ISO8859-9 ISO_8859-9 ISO_8859-9:1989 L5 LATIN5 CSISOLATIN5
ISO-8859-10 ISO-IR-157 ISO8859-10 ISO_8859-10 ISO_8859-10:1992 L6 LATIN6 CSISOLATIN6
ISO-8859-11 ISO8859-11 ISO_8859-11
ISO-8859-13 ISO-IR-179 ISO8859-13 ISO_8859-13 L7 LATIN7
ISO-8859-14 ISO-CELTIC ISO-IR-199 ISO8859-14 ISO_8859-14 ISO_8859-14:1998 L8 LATIN8
ISO-8859-15 ISO-IR-203 ISO8859-15 ISO_8859-15 ISO_8859-15:1998 LATIN-9
ISO-8859-16 ISO-IR-226 ISO8859-16 ISO_8859-16 ISO_8859-16:2001 L10 LATIN10
KOI8-R CSKOI8R
KOI8-U
KOI8-RU
CP1250 MS-EE WINDOWS-1250
CP1251 MS-CYRL WINDOWS-1251
CP1252 MS-ANSI WINDOWS-1252
CP1253 MS-GREEK WINDOWS-1253
CP1254 MS-TURK WINDOWS-1254
CP1255 MS-HEBR WINDOWS-1255
CP1256 MS-ARAB WINDOWS-1256
CP1257 WINBALTRIM WINDOWS-1257
CP1258 WINDOWS-1258
850 CP850 IBM850 CSPC850MULTILINGUAL
862 CP862 IBM862 CSPC862LATINHEBREW
866 CP866 IBM866 CSIBM866
MAC MACINTOSH MACROMAN CSMACINTOSH
MACCENTRALEUROPE
MACICELAND
MACCROATIAN
MACROMANIA
MACCYRILLIC
MACUKRAINE
MACGREEK
MACTURKISH
MACHEBREW
MACARABIC
MACTHAI
HP-ROMAN8 R8 ROMAN8 CSHPROMAN8
NEXTSTEP
ARMSCII-8
GEORGIAN-ACADEMY
GEORGIAN-PS
KOI8-T
CP154 CYRILLIC-ASIAN PT154 PTCP154 CSPTCP154
KZ-1048 RK1048 STRK1048-2002 CSKZ1048
MULELAO-1
CP1133 IBM-CP1133
ISO-IR-166 TIS-620 TIS620 TIS620-0 TIS620.2529-1 TIS620.2533-0 TIS620.2533-1
CP874 WINDOWS-874
VISCII VISCII1.1-1 CSVISCII
TCVN TCVN-5712 TCVN5712-1 TCVN5712-1:1993
ISO-IR-14 ISO646-JP JIS_C6220-1969-RO JP CSISO14JISC6220RO
JISX0201-1976 JIS_X0201 X0201 CSHALFWIDTHKATAKANA
ISO-IR-87 JIS0208 JIS_C6226-1983 JIS_X0208 JIS_X0208-1983 JIS_X0208-1990 X0208 CSISO87JISX0208
ISO-IR-159 JIS_X0212 JIS_X0212-1990 JIS_X0212.1990-0 X0212 CSISO159JISX02121990
CN GB_1988-80 ISO-IR-57 ISO646-CN CSISO57GB1988
CHINESE GB_2312-80 ISO-IR-58 CSISO58GB231280
CN-GB-ISOIR165 ISO-IR-165
ISO-IR-149 KOREAN KSC_5601 KS_C_5601-1987 KS_C_5601-1989 CSKSC56011987
EUC-JP EUCJP EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE CSEUCPKDFMTJAPANESE
MS_KANJI SHIFT-JIS SHIFT_JIS SJIS CSSHIFTJIS
CP932
ISO-2022-JP CSISO2022JP
ISO-2022-JP-1
ISO-2022-JP-2 CSISO2022JP2
CN-GB EUC-CN EUCCN GB2312 CSGB2312
GBK
CP936 MS936 WINDOWS-936
GB18030
ISO-2022-CN CSISO2022CN
ISO-2022-CN-EXT
HZ HZ-GB-2312
EUC-TW EUCTW CSEUCTW
BIG-5 BIG-FIVE BIG5 BIGFIVE CN-BIG5 CSBIG5
CP950
BIG5-HKSCS:1999
BIG5-HKSCS:2001
BIG5-HKSCS BIG5-HKSCS:2004 BIG5HKSCS
EUC-KR EUCKR CSEUCKR
CP949 UHC
CP1361 JOHAB
ISO-2022-KR CSISO2022KR
CP856
CP922
CP943
CP1046
CP1124
CP1129
CP1161 IBM-1161 IBM1161 CSIBM1161
CP1162 IBM-1162 IBM1162 CSIBM1162
CP1163 IBM-1163 IBM1163 CSIBM1163
DEC-KANJI
DEC-HANYU
437 CP437 IBM437 CSPC8CODEPAGE437
CP737
CP775 IBM775 CSPC775BALTIC
852 CP852 IBM852 CSPCP852
CP853
855 CP855 IBM855 CSIBM855
857 CP857 IBM857 CSIBM857
CP858
860 CP860 IBM860 CSIBM860
861 CP-IS CP861 IBM861 CSIBM861
863 CP863 IBM863 CSIBM863
CP864 IBM864 CSIBM864
865 CP865 IBM865 CSIBM865
869 CP-GR CP869 IBM869 CSIBM869
CP1125
EUC-JISX0213
SHIFT_JISX0213
ISO-2022-JP-3
BIG5-2003
ISO-IR-230 TDS565
ATARI ATARIST
RISCOS-LATIN1
  • © 2020 GitHub , Inc.
  • Terms
  • Privacy
  • Security
  • Status
  • Help

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Iconv_get_encoding

Php функции


Php скрипты


iconv_get_encoding

(PHP 4 >= 4.0.5, PHP 5)

iconv_get_encoding — Возвращает значение внутренних переменных расширения

Описание

mixed iconv_get_encoding ( [ string type ] )

Возвращает текущее значение указанной внутренней переменной, и FALSE в случае ошибки.

Возможные значения необязательного параметра type :

all
input_encoding
output_encoding
internal_encoding

Если type не указан, или равен «all», iconv_get_encoding() вернёт массив со сначениями всех переменных.

Пример 1. Пример использования iconv_get_encoding()

Результат выполнения приведенных выше команд:

Array ( [ input_encoding ] => WINDOWS-1251 [ output_encoding ] => KOI8-U [ internal_encoding ] => UTF-8 )

См. также iconv_set_encoding() и ob_iconv_handler().

add a note User Contributed Notes
iconv_get_encoding There are no user contributed notes for this page.
iconv_mime_decode_headers iconv Last updated: Sat, 27 Jan 2007 show source | credits | sitemap | contact | advertising | mirror sites Copyright & copy ; 2001-2007 The PHP Group
All rights reserved. This mirror generously provided by:
Last updated: Sun Oct 21 04:40:01 2007 MSD

Что такое код iconv_get_encoding

Если начальная_кодировка не задана, то по умолчанию используются данные о кодировке текущей локали. Если конечная_кодировка не задана, то по умолчанию используются данные о кодировке текущей локали.

ПАРАМЕТРЫ

Если в конечную_кодировку добавлена строка //IGNORE, то символы, которые невозможно преобразовать, отбрасываются и после преобразования выводится ошибка.

Если в конечную_кодировку добавлена строка //TRANSLIT, то при необходимости и возможности символы будут транслитерироваться. Это означает, что когда символ невозможно представить в конечной кодировке, он может быть приблизительно преобразован в один из похожих символов. Символы, которые отсутствуют в конечной кодировке и их невозможно транслитерировать, в выводе заменяются на знак вопроса (?).

-l, —list Вывести все известные кодировки символов. -c Отбрасывать символы, которые невозможно преобразовать, а не прекращать работу при обнаружении такого символа. -o файл_результата, —output=файл_результата Использовать файл_результата для вывода. -s, —silent Параметр игнорируется, предоставляется только для совместимости. —verbose Выводить информацию о ходе работы в стандартный поток ошибок при обработке нескольких файлов. -?, —help Показать справку по использованию и завершить работу. —usage Показать краткую справку по использованию и завершить работу. -V, —version Показать номер версии, лицензию и уведомление о гарантиях для iconv.

КОД ВЫХОДА

ОКРУЖЕНИЕ

ФАЙЛЫ

СООТВЕТСТВИЕ СТАНДАРТАМ

ПРИМЕР

В следующем примере выполняется преобразование из UTF-8 в ASCII с транслитерацией где возможно:

Илон Маск рекомендует:  Что такое код mt_getrandmax
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL