1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-26 08:42:13 +01:00
Files
archived-doc-ru/reference/strings/functions/utf8-decode.xml
Mikhail Alferov 3f89f12094 Обновление перевода (#610)
Co-authored-by: Sergey Panteleev <sergey@php.net>
2023-12-26 09:45:29 +03:00

268 lines
9.1 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
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: b676d0b9c968ebb0b7429835f2f6bd364275eed1 Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.utf8-decode">
<refnamediv>
<refname>utf8_decode</refname>
<refpurpose>Преобразовывает строку из кодировки UTF-8 в кодировку ISO-8859-1, заменяя недопустимые или непредставимые символы</refpurpose>
</refnamediv>
<refsynopsisdiv>
&warn.deprecated.function-8-2-0;
</refsynopsisdiv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>string</type><methodname>utf8_decode</methodname>
<methodparam><type>string</type><parameter>string</parameter></methodparam>
</methodsynopsis>
<para>
Функция преобразовывает строку <parameter>string</parameter> из кодировки
<literal>UTF-8</literal> в кодировку <literal>ISO-8859-1</literal>.
Байты в строке, которые не соответствуют корректным символам <literal>UTF-8</literal>
и символам <literal>UTF-8</literal>, которые не существуют в <literal>ISO-8859-1</literal>
(то есть кодовые точки выше <literal>U+00FF</literal>), будут заменены на символ <literal>?</literal>.
</para>
<note>
<para>
Многие веб-страницы, отмеченные как использующие кодировку
<literal>ISO-8859-1</literal>, на самом деле используют схожую кодировку
<literal>Windows-1252</literal>, и веб-браузеры интерпретируют
страницы <literal>ISO-8859-1</literal> как <literal>Windows-1252</literal>.
Однако <literal>Windows-1252</literal> содержит дополнительные печатные
символы, такие как знак Евро (<literal></literal>) и фигурные кавычки
(<literal></literal> <literal></literal>) вместо управляющих кодов
<literal>ISO-8859-1</literal>. Эта функция не конвертирует такие символы
<literal>Windows-1252</literal> корректно. Используйте другую функцию,
если нужна конвертация в <literal>Windows-1252</literal>.
</para>
</note>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>string</parameter></term>
<listitem>
<para>
Строка, закодированная в UTF-8.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает данные параметра <parameter>string</parameter>, переведённые в кодировку ISO-8859-1.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.2.0</entry>
<entry>
Функция объявлена устаревшей.
</entry>
</row>
<row>
<entry>7.2.0</entry>
<entry>
Функция была перенесена из модуля XML в ядро PHP.
В предыдущих версиях она была доступна только при установленном модуле XML.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
<title>Простой пример</title>
<programlisting role="php">
<![CDATA[
<?php
// Преобразование строки 'Zoë' из UTF-8 в ISO 8859-1
$utf8_string = "\x5A\x6F\xC3\xAB";
$iso8859_1_string = utf8_decode($utf8_string);
echo bin2hex($iso8859_1_string), "\n";
// Неправильные последовательности UTF-8 заменяются на '?'
$invalid_utf8_string = "\xC3";
$iso8859_1_string = utf8_decode($invalid_utf8_string);
var_dump($iso8859_1_string);
// Символы, не существующие в ISO 8859-1, такие как
// '€' (Знак евро) также заменяются на '?'
$utf8_string = "\xE2\x82\xAC";
$iso8859_1_string = utf8_decode($utf8_string);
var_dump($iso8859_1_string);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
5a6feb
string(1) "?"
string(1) "?"
]]>
</screen>
</example>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<title>Устаревание и альтернативы</title>
<para>
Функция <emphasis>устарела</emphasis>, начиная с PHP 8.2.0 и будет удалена в будущей версии.
Существующие варианты использования должны быть проверены и заменены подходящими альтернативами.
</para>
<para>
Аналогичной функциональности можно достичь с помощью функции <function>mb_convert_encoding</function>,
которая поддерживает ISO-8859-1 и многие другие кодировки символов.
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$utf8_string = "\xC3\xAB"; // 'ë' (e с диерезисом) в UTF-8
$iso8859_1_string = mb_convert_encoding($utf8_string, 'ISO-8859-1', 'UTF-8');
echo bin2hex($iso8859_1_string), "\n";
$utf8_string = "\xCE\xBB"; // 'λ' (Греческая строчная лямбда) в UTF-8
$iso8859_7_string = mb_convert_encoding($utf8_string, 'ISO-8859-7', 'UTF-8');
echo bin2hex($iso8859_7_string), "\n";
$utf8_string = "\xE2\x82\xAC"; // '€' (Символ евро) в UTF-8 (отсутствует в ISO-8859-1)
$windows_1252_string = mb_convert_encoding($utf8_string, 'Windows-1252', 'UTF-8');
echo bin2hex($windows_1252_string), "\n";
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
eb
eb
80
]]>
</screen>
</informalexample>
</para>
<para>
Другие опции, которые могут быть доступны в зависимости от установленных модулей:
<methodname>UConverter::transcode</methodname> и <function>iconv</function>.
</para>
<para>
Все следующие варианты дают один и тот же результат:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$utf8_string = "\x5A\x6F\xC3\xAB"; // 'Zoë' в UTF-8
$iso8859_1_string = utf8_decode($utf8_string);
echo bin2hex($iso8859_1_string), "\n";
$iso8859_1_string = mb_convert_encoding($utf8_string, 'ISO-8859-1', 'UTF-8');
echo bin2hex($iso8859_1_string), "\n";
$iso8859_1_string = iconv('UTF-8', 'ISO-8859-1', $utf8_string);
echo bin2hex($iso8859_1_string), "\n";
$iso8859_1_string = UConverter::transcode($utf8_string, 'ISO-8859-1', 'UTF8');
echo bin2hex($iso8859_1_string), "\n";
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
5a6feb
5a6feb
5a6feb
5a6feb
]]>
</screen>
</informalexample>
Указание <literal>'?'</literal> в качестве опции <literal>'to_subst'</literal>
в методе <methodname>UConverter::transcode</methodname> даёт тот же результат,
что и функция <function>utf8_decode</function> для строк,
которые являются недопустимыми или не могут быть представлены в ISO 8859-1.
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$utf8_string = "\xE2\x82\xAC"; // € (Символ евро) отсутствует в ISO-8859-1
$iso8859_1_string = UConverter::transcode(
$utf8_string, 'ISO-8859-1', 'UTF-8', ['to_subst' => '?']
);
var_dump($iso8859_1_string);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
sring(1) "?"
]]>
</screen>
</informalexample>
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>utf8_encode</function></member>
<member><function>mb_convert_encoding</function></member>
<member><methodname>UConverter::transcode</methodname></member>
<member><function>iconv</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
-->