1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-25 16:22:18 +01:00
Files
archived-doc-ru/reference/mbstring/functions/mb-detect-encoding.xml
2024-03-31 04:22:06 +03:00

261 lines
10 KiB
XML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 2c17cef6e71c3d85011319cde128cc4edf89a053 Maintainer: tmn Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.mb-detect-encoding" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>mb_detect_encoding</refname>
<refpurpose>Определяет кодировку символов</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>string</type><type>false</type></type><methodname>mb_detect_encoding</methodname>
<methodparam><type>string</type><parameter>string</parameter></methodparam>
<methodparam choice="opt"><type class="union"><type>array</type><type>string</type><type>null</type></type><parameter>encodings</parameter><initializer>&null;</initializer></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>strict</parameter><initializer>&false;</initializer></methodparam>
</methodsynopsis>
<para>
Определяет наиболее вероятную кодировку символов строки,
переданной в параметр <parameter>string</parameter>,
проверяя список кандидатов по порядку.
</para>
<para>
Автоматическое определение предполагаемой кодировки символов не полностью надёжно;
без дополнительной информации это похоже на расшифровку зашифрованной строки без ключа.
Лучше предпочесть указание кодировки символов, хранящейся или передаваемой с данными,
например в HTTP-заголовке Content-Type.
</para>
<para>
Функция будет полезнее, если вызывать её с многобайтовыми кодировками,
поскольку не все последовательности байтов образуют допустимую строку.
Если входная строка содержит такую последовательность,
кодировка будет отклонена, и будет проверена следующая кодировка.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>string</parameter></term>
<listitem>
<para>
Проверяемая строка (<type>string</type>).
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>encodings</parameter></term>
<listitem>
<para>
Список кодировок символов для проверки в заданном порядке.
Список может быть определён как массив строк
или как одна строка, разделённая запятыми.
</para>
<para>
Если параметр <parameter>encodings</parameter> не задан или равен &null;,
будет выбрана кодировка, установленная в директиве с именем detect_order (устанавливают
в директиве <link linkend="ini.mbstring.detect-order">mbstring.detect_order</link> настроек конфигурации
или функцией <function>mb_detect_order</function>).
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>strict</parameter></term>
<listitem>
<para>
Управляет поведением, когда строка в параметре <parameter>string</parameter>
недопустима ни для одной перечисленной в параметре <parameter>encodings</parameter> кодировки.
Если параметр <parameter>strict</parameter> установлен в значение &false;,
будет возвращена первая совпавшая кодировка;
если параметр <parameter>strict</parameter> установлен в значение &true;,
будет возвращено значение &false;.
</para>
<para>
Значение по умолчанию для параметра <parameter>strict</parameter>
можно установить в директиве
<link linkend="ini.mbstring.strict-detection">mbstring.strict_detection</link>
настроек конфигурации.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Функция возвращает кодировку символов, которую обнаружила, или &false;,
если строка недопустима ни для одной из перечисленных кодировок.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.2.0</entry>
<entry>
Функция <function>mb_detect_encoding</function> больше не будет возвращать
следующие нетекстовые кодировки:
<literal>«Base64»</literal>, <literal>«QPrint»</literal>,
<literal>«UUencode»</literal>, <literal>«HTML entities»</literal>,
<literal>«7 bit»</literal> и <literal>«8 bit»</literal>.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования функции <function>mb_detect_encoding</function></title>
<programlisting role="php">
<![CDATA[
<?php
// Определение кодировки с текущей detect_order
echo mb_detect_encoding($str);
// Значение «auto» раскрывается в соответствии с директивой mbstring.language
echo mb_detect_encoding($str, "auto");
// Установка параметра «encodings» списком, разделённым запятой
echo mb_detect_encoding($str, "JIS, eucjp-win, sjis-win");
// Установка параметра «encodings» массивом
$encodings = [
"ASCII",
"JIS",
"EUC-JP"
];
echo mb_detect_encoding($str, $encodings);
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Действие параметра <parameter>strict</parameter></title>
<programlisting role="php">
<![CDATA[
<?php
// «áéóú» закодирована в ISO-8859-1
$str = "\xE1\xE9\xF3\xFA";
// Строка недействительна для кодировок ASCII или UTF-8, но UTF-8 считается более близким соответствием
var_dump(mb_detect_encoding($str, ['ASCII', 'UTF-8'], false));
var_dump(mb_detect_encoding($str, ['ASCII', 'UTF-8'], true));
// Если допустимая кодировка найдена, параметр strict не меняет результат
var_dump(mb_detect_encoding($str, ['ASCII', 'UTF-8', 'ISO-8859-1'], false));
var_dump(mb_detect_encoding($str, ['ASCII', 'UTF-8', 'ISO-8859-1'], true));
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
string(5) "UTF-8"
bool(false)
string(10) "ISO-8859-1"
string(10) "ISO-8859-1"
]]>
</screen>
</example>
</para>
<para>
Иногда одна и та же последовательность байтов может образовывать
допустимую строку в нескольких кодировках символов, и невозможно узнать, какая интерпретация предполагалась.
Например, среди многих других байтовая последовательность «\xC4\xA2» может быть:
</para>
<para>
<simplelist>
<member>
«Ä¢» (U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS с последующим U+00A2 CENT SIGN),
закодированная в одной из кодировок — ISO-8859-1, ISO-8859-15 или Windows-1252
</member>
<member>
«ФЂ» (U+0424 CYRILLIC CAPITAL LETTER EF с последующим U+0402 CYRILLIC CAPITAL LETTER
DJE), закодированная в ISO-8859-5
</member>
<member>
«Ģ» (U+0122 LATIN CAPITAL LETTER G WITH CEDILLA), закодированная в UTF-8
</member>
</simplelist>
</para>
<para>
<example>
<title>Действие порядка кодировок при совпадении нескольких кандидатов</title>
<programlisting role="php">
<![CDATA[
<?php
$str = "\xC4\xA2";
// Строка действительна во всех трёх кодировках, поэтому будет возвращена первая из перечисленных кодировок
var_dump(mb_detect_encoding($str, ['UTF-8', 'ISO-8859-1', 'ISO-8859-5']));
var_dump(mb_detect_encoding($str, ['ISO-8859-1', 'ISO-8859-5', 'UTF-8']));
var_dump(mb_detect_encoding($str, ['ISO-8859-5', 'UTF-8', 'ISO-8859-1']));
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
string(5) "UTF-8"
string(10) "ISO-8859-1"
string(10) "ISO-8859-5"
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>mb_detect_order</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->