Обновление до английской версии

This commit is contained in:
Sergey Panteleev
2023-07-04 10:46:18 +03:00
parent ff3b80ea3f
commit f7a693ce3d
8 changed files with 325 additions and 58 deletions

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: cdc9d28d334bbc08386fecf8aade66080004a9dd Maintainer: sergey Status: ready --> <!-- EN-Revision: 6dd0689d9143fa9a06dcbbf03688cd739a8a6219 Maintainer: sergey Status: ready -->
<!-- Reviewed: no --> <!-- Reviewed: no -->
<book xml:id="mongodb.architecture" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> <book xml:id="mongodb.architecture" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<titleabbrev>Архитектура и внутреннее устройство драйвера</titleabbrev> <titleabbrev>Архитектура и внутреннее устройство драйвера</titleabbrev>
@ -674,6 +674,24 @@ class UpperClass implements MongoDB\BSON\Persistable {
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term><literal>"bson"</literal></term>
<listitem>
<para>
Превращает BSON массив в <classname>MongoDB\BSON\PackedArray</classname>
и BSON документ в <classname>MongoDB\BSON\Document</classname>,
независимо от того, есть ли у BSON документа свойство <property>__pclass</property>
<footnoteref linkend="mongodb.pclass"/>.
</para>
<note>
<simpara>
Значение <literal>bson</literal> доступно только для трёх корневых типов,
но не в отображениях для конкретных полей.
</simpara>
</note>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term>любая другая строка</term> <term>любая другая строка</term>
<listitem> <listitem>
@ -718,7 +736,9 @@ class UpperClass implements MongoDB\BSON\Persistable {
<methodname>MongoDB\Driver\Cursor::setTypeMap</methodname> для объекта <methodname>MongoDB\Driver\Cursor::setTypeMap</methodname> для объекта
<classname>MongoDB\Driver\Cursor</classname> или аргумента <classname>MongoDB\Driver\Cursor</classname> или аргумента
<literal>$typeMap</literal> в <literal>$typeMap</literal> в
<function>MongoDB\BSON\toPHP</function>. Каждый из трёх <function>MongoDB\BSON\toPHP</function>,
<methodname>MongoDB\BSON\Document::toPHP</methodname> и
<methodname>MongoDB\BSON\PackedArray::toPHP</methodname>. Каждый из трёх
классов (<emphasis>root</emphasis>, <emphasis>document</emphasis>, и классов (<emphasis>root</emphasis>, <emphasis>document</emphasis>, и
<emphasis>array</emphasis>) может быть задан индивидуально, в дополнение <emphasis>array</emphasis>) может быть задан индивидуально, в дополнение
к типам полей. к типам полей.

View File

@ -1,29 +1,74 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 4691215483797da841e61de00eef8adba2960d21 Maintainer: sergey Status: ready --> <!-- EN-Revision: 52c3812df42c03188138c6930e49ecd7188f0e86 Maintainer: sergey Status: ready -->
<!-- Reviewed: no --> <!-- Reviewed: no -->
<refentry xml:id="mongodb-bson-int64.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> <refentry xml:id="mongodb-bson-int64.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv> <refnamediv>
<refname>MongoDB\BSON\Int64::__construct</refname> <refname>MongoDB\BSON\Int64::__construct</refname>
<refpurpose>Создаёт новый Int64 (не используется)</refpurpose> <refpurpose>Создаёт новый Int64</refpurpose>
</refnamediv> </refnamediv>
<refsect1 role="description"> <refsect1 role="description">
&reftitle.description; &reftitle.description;
<methodsynopsis> <methodsynopsis>
<modifier>final</modifier> <modifier>private</modifier> <methodname>MongoDB\BSON\Int64::__construct</methodname> <modifier>final</modifier> <modifier>public</modifier> <methodname>MongoDB\BSON\Int64::__construct</methodname>
<void/> <methodparam><type class="union"><type>int</type><type>string</type></type><parameter>value</parameter></methodparam>
</methodsynopsis> </methodsynopsis>
<para> <para>
<classname>MongoDB\BSON\Int64</classname> объекты создаются путём Создаёт новый экземпляр <classname>MongoDB\BSON\Int64</classname>
преобразования из 64-разрядного целочисленного типа BSON на 32-разрядной платформе и не могут быть для заданного целого числа.
созданы напрямую.
</para> </para>
</refsect1> </refsect1>
<refsect1 role="parameters"> <refsect1 role="parameters">
&reftitle.parameters; &reftitle.parameters;
&no.function.parameters; <variablelist>
<varlistentry>
<term><parameter>value</parameter> (<type class="union"><type>int</type><type>string</type></type>)</term>
<listitem>
<para>
Значение, присваиваемое экземпляру <classname>Int64</classname>.
Это значение может быть предоставлено как целое число (<type>int</type>) или строка (<type>string</type>),
последнее требуется на 32-битных платформах для представления 64-битных значений.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>PECL mongodb 1.16.0</entry>
<entry>
<para>
Метод стал доступен для поддержки создания экземпляров Int64
при работе с необработанным BSON.
</para>
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<simplelist>
&mongodb.throws.argumentparsing;
<member>Выбрасывает исключение <classname>MongoDB\Driver\Exception\InvalidArgumentException</classname>,
если строка <parameter>value</parameter> не может быть разобрана как 64-битное целое число.</member>
</simplelist>
</refsect1> </refsect1>
<refsect1 role="seealso"> <refsect1 role="seealso">

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: deb6ee36001e5d315c92780db3a6cf64fe4f70bf Maintainer: shein Status: ready --> <!-- EN-Revision: 665c1d6da54067f8dcd5eb1a292aa03f5bc0e2d4 Maintainer: shein Status: ready -->
<!-- Reviewed: no --> <!-- Reviewed: no -->
<refentry xml:id="ocilob.read" xmlns="http://docbook.org/ns/docbook"> <refentry xml:id="ocilob.read" xmlns="http://docbook.org/ns/docbook">
<refnamediv> <refnamediv>
@ -14,14 +14,13 @@
<methodparam><type>int</type><parameter>length</parameter></methodparam> <methodparam><type>int</type><parameter>length</parameter></methodparam>
</methodsynopsis> </methodsynopsis>
<para> <para>
Читает и возвращает <parameter>length</parameter> байт данных с текущей Читает <parameter>length</parameter> байтов (BLOB) или символов (CLOB)
позиции объекта LOB. с текущей позиции объекта LOB.
</para> </para>
<para> <para>
Чтение останавливается, если длина прочтённых данных равна Чтение останавливается, когда прочитано <parameter>length</parameter> байтов для BLOB,
<parameter>length</parameter> или если достигнут конец объекта. <parameter>length</parameter> символов для CLOB или когда достигнут конец объекта.
Внутренний указатель перемещается на столько байт, сколько было Внутренний указатель объекта будет сдвинут на количество прочитанных байт/символов.
прочитано.
</para> </para>
</refsect1> </refsect1>
@ -33,7 +32,8 @@
<term><parameter>length</parameter></term> <term><parameter>length</parameter></term>
<listitem> <listitem>
<para> <para>
Длина считываемых данных, в байтах. Большие значения округляются вниз до 1 MB. Длина считываемых данных, в байтах (BLOB) или символах (CLOB).
Большие значения округляются вниз до 1 MB.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d4d537e6a2a9e11b24d5a42e8be7b2d4763c3f0e Maintainer: mch Status: ready --> <!-- EN-Revision: 968c2bc60de3e93d7f38be0b9d2d1b9685a16ea7 Maintainer: mch Status: ready -->
<!-- Reviewed: no --> <!-- Reviewed: no -->
<section xml:id="pdo-mysql.constants" xmlns="http://docbook.org/ns/docbook"> <section xml:id="pdo-mysql.constants" xmlns="http://docbook.org/ns/docbook">
&reftitle.constants; &reftitle.constants;
@ -8,26 +8,27 @@
<varlistentry xml:id="pdo.constants.mysql-attr-use-buffered-query"> <varlistentry xml:id="pdo.constants.mysql-attr-use-buffered-query">
<term> <term>
<constant>PDO::MYSQL_ATTR_USE_BUFFERED_QUERY</constant> <constant>PDO::MYSQL_ATTR_USE_BUFFERED_QUERY</constant>
(<type>int</type>) (<type>bool</type>)
</term> </term>
<listitem> <listitem>
<simpara> <simpara>
Если этот атрибут установлен в &true; в По умолчанию все запросы выполняются
<classname>PDOStatement</classname>, MySQL-драйвер в <link linkend="mysqlinfo.concepts.buffering">буферизованном режиме</link>.
будет использовать буферизованные версии API MySQL. Если этот атрибут установлен в значение &false;
Если вы пишете переносимый на другие библиотеки код, для объекта <classname>PDO</classname>,
вы должны использовать <function>PDOStatement::fetchAll</function>. драйвер MySQL будет использовать небуферизованный режим.
</simpara> </simpara>
<para> <para>
<example><title>Буферизация запросов в MySQL</title> <example><title>Установка небуферизованного режима MySQL</title>
<programlisting role="php"> <programlisting role="php">
<![CDATA[ <![CDATA[
<?php <?php
if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') { $pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_password');
$stmt = $db->prepare('select * from foo', $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));
} else { $unbufferedResult = $pdo->query("SELECT Name FROM City");
die("приложение работает только с mysql; Следует использовать \$stmt->fetchAll() вместо этого"); foreach ($unbufferedResult as $row) {
echo $row['Name'] . PHP_EOL;
} }
?> ?>
]]> ]]>

View File

@ -1,14 +1,13 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 184f3f7bd45643cb80f828d0bb001991ec3a5fad Maintainer: rjhdby Status: ready --> <!-- EN-Revision: ccb379494533c9b7d63a81f0221231a9e526eee9 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no --> <!-- Reviewed: no -->
<chapter xml:id="session.security" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> <chapter xml:id="session.security" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Безопасность сессий</title> <title>Безопасность сессий</title>
<para> <para>
Внешние ссылки: <link xlink:href="&url.session-fixation;">Атака "Фиксация сессии"</link> Внешние ссылки: <link xlink:href="&url.session-fixation;">Атака "Фиксация сессии"</link>
</para> </para>
<para> <para>
Работа с HTTP-сессиями является основой веб-безопасности. Должны быть применены Работа с HTTP-сессиями является основой веб-безопасности. <emphasis>Должны</emphasis> быть применены
все возможные меры для обеспечения безопасности сессии. Разработчик должен включать и все возможные меры для обеспечения безопасности сессии. Разработчик должен включать и
использовать соответствующие настройки соответствующим образом. использовать соответствующие настройки соответствующим образом.
</para> </para>
@ -31,7 +30,7 @@
приводят к ухудшению удобства для конечного пользователя. приводят к ухудшению удобства для конечного пользователя.
Например, если необходимо защитить пользователя от Например, если необходимо защитить пользователя от
простейших методов социальной инженерии, следует включить простейших методов социальной инженерии, следует включить
<literal>session.use_only_cookies</literal>. В данном случае со стороны <link linkend="ini.session.use-only-cookies">session.use_only_cookies</link>. В данном случае со стороны
пользовательского ПО обязательна поддержка cookie, иначе механизм сессий не пользовательского ПО обязательна поддержка cookie, иначе механизм сессий не
будет работать. будет работать.
</para> </para>
@ -149,7 +148,8 @@
<note> <note>
<simpara> <simpara>
В версиях PHP до 7.1.0 необходимо использовать CSPRNG, то есть /dev/urandom или В версиях PHP до 7.1.0 <emphasis>необходимо</emphasis> использовать <acronym>CSPRNG</acronym>,
например, <filename>/dev/urandom</filename> или
<function>random_bytes</function> и функции хеширования для генерации <function>random_bytes</function> и функции хеширования для генерации
нового идентификатора сессии. <function>session_create_id</function> имеет нового идентификатора сессии. <function>session_create_id</function> имеет
встроенная функциональность обнаружения коллизий и генерирует идентификатор встроенная функциональность обнаружения коллизий и генерирует идентификатор
@ -182,7 +182,7 @@
Идентификатор сессии <emphasis>должен</emphasis> пересоздаваться при Идентификатор сессии <emphasis>должен</emphasis> пересоздаваться при
повышении привилегий пользователя, например при аутентификации. повышении привилегий пользователя, например при аутентификации.
Функция <function>session_regenerate_id</function> должна вызываться до записи Функция <function>session_regenerate_id</function> должна вызываться до записи
авторизационной информации в $_SESSION. авторизационной информации в <varname>$_SESSION</varname>.
(<function>session_regenerate_id</function> сохраняет данные текущей сессии (<function>session_regenerate_id</function> сохраняет данные текущей сессии
автоматически). Убедитесь, что только текущая сессия отмечена как автоматически). Убедитесь, что только текущая сессия отмечена как
авторизованная. авторизованная.
@ -209,8 +209,8 @@
старых сессий сохраняются до момента запуска сборщика мусора. старых сессий сохраняются до момента запуска сборщика мусора.
В то же время, разработчики должны убедиться, что данные В то же время, разработчики должны убедиться, что данные
истёкших сессий удалены. Однако разработчики НЕ должны удалять данные активных сессий немедленно. истёкших сессий удалены. Однако разработчики НЕ должны удалять данные активных сессий немедленно.
Например, никогда не вызывайте <literal>session_regenerate_id(true);</literal> Например, никогда не вызывайте <code>session_regenerate_id(true);</code>
и <function> session_destroy</function> совместно для активных сессий. и <function>session_destroy</function> совместно для активных сессий.
Это может показаться противоречивым, но это обязательное требование. Это может показаться противоречивым, но это обязательное требование.
</simpara> </simpara>
</warning> </warning>
@ -236,7 +236,7 @@
<simpara> <simpara>
Вместо немедленного удаления старых сессий вы должны сохранять их Вместо немедленного удаления старых сессий вы должны сохранять их
непродолжительное время, например, установив специальный флаг и непродолжительное время, например, установив специальный флаг и
время окончательного истечения сессии в $_SESSION, запретив время окончательного истечения сессии в <varname>$_SESSION</varname>, запретив
кому-либо обращаться к этим данным. кому-либо обращаться к этим данным.
</simpara> </simpara>
<simpara> <simpara>
@ -264,9 +264,9 @@
<warning> <warning>
<simpara> <simpara>
Не недооценивайте риск DoS. <literal>use_strict_mode=On</literal> Не недооценивайте риск DoS. <link linkend="ini.session.use-strict-mode">session.use_strict_mode</link>=On
обязателен для общей безопасности идентификаторов сессий! обязателен для общей безопасности идентификаторов сессий!
Все сайты должны использовать <literal>use_strict_mode</literal>. Все сайты должны использовать <link linkend="ini.session.use-strict-mode">session.use_strict_mode</link>.
</simpara> </simpara>
<simpara> <simpara>
DoS (отказ в обслуживании) может произойти только тогда, когда аккаунт DoS (отказ в обслуживании) может произойти только тогда, когда аккаунт
@ -339,7 +339,7 @@
Для уменьшения риска DoS с использованием блокировки сессий, минимизируйте их. Для уменьшения риска DoS с использованием блокировки сессий, минимизируйте их.
Используйте блокировку "read only", когда сессию не нужно обновлять. Используйте блокировку "read only", когда сессию не нужно обновлять.
Используйте опцию 'read_and_close' с <function>session_start</function>. Используйте опцию 'read_and_close' с <function>session_start</function>.
<literal>session_start(['read_and_close'=>1]);</literal> <code>session_start(['read_and_close'=>1]);</code>
Закрывайте сессию с помощью <function>session_commit</function> сразу, как только Закрывайте сессию с помощью <function>session_commit</function> сразу, как только
вы закончили обновлять $_SESSION. вы закончили обновлять $_SESSION.
</para> </para>
@ -415,7 +415,7 @@
в качестве ключей автологина с помощью <function>setcookie</function>. в качестве ключей автологина с помощью <function>setcookie</function>.
Используйте безопасное хеширование, посильнее чем SHA-2, например Используйте безопасное хеширование, посильнее чем SHA-2, например
SHA-256 или выше со случайными данными из <function>random_bytes</function> SHA-256 или выше со случайными данными из <function>random_bytes</function>
или /dev/urandom. или <filename>/dev/urandom</filename>.
</para> </para>
<para> <para>
@ -515,9 +515,9 @@
"cookie". Большинство приложений должны использовать cookie для идентификатора сессии. "cookie". Большинство приложений должны использовать cookie для идентификатора сессии.
</para> </para>
<para> <para>
Если <literal>session.use_only_cookies</literal>=Off, Если <link linkend="ini.session.use-only-cookies">session.use_only_cookies</link>=Off,
модуль сессии будет использовать идентификатор, установленный модуль сессии будет использовать идентификатор, установленный
через GET/POST/URL, если "cookie" не была выставлена заранее. через GET или POST, если "cookie" не была выставлена заранее.
</para> </para>
</listitem> </listitem>
@ -527,7 +527,7 @@
</para> </para>
<para> <para>
Крайне рекомендуется включать Крайне рекомендуется включать
<literal>session.use_strict_mode</literal>. По умолчанию не включено. <link linkend="ini.session.use-strict-mode">session.use_strict_mode</link>. По умолчанию не включено.
</para> </para>
<para> <para>
Это не позволит сессионному модулю использовать неинициализированные Это не позволит сессионному модулю использовать неинициализированные
@ -539,7 +539,7 @@
Из-за особенностей спецификации cookie, атакующий может сделать Из-за особенностей спецификации cookie, атакующий может сделать
cookie с идентификатором сессии неудаляемой с помощью локальной cookie с идентификатором сессии неудаляемой с помощью локальной
базы cookie или JavaScript-инъекцией. базы cookie или JavaScript-инъекцией.
<literal>session.use_strict_mode</literal> может не дать <link linkend="ini.session.use-strict-mode">session.use_strict_mode</link> может не дать
атакующему использовать этот идентификатор. атакующему использовать этот идентификатор.
</para> </para>
<note> <note>
@ -548,7 +548,7 @@
и выставить его жертве. Они должны будут поддерживать сессию в активном и выставить его жертве. Они должны будут поддерживать сессию в активном
состоянии для злоупотреблений. Атакующим понадобится совершить состоянии для злоупотреблений. Атакующим понадобится совершить
дополнительные действия для проведения атаки по этому сценарию. дополнительные действия для проведения атаки по этому сценарию.
Поэтому <literal>session.use_strict_mode</literal> Поэтому <link linkend="ini.session.use-strict-mode">session.use_strict_mode</link>
служит как предотвращение этому. служит как предотвращение этому.
</para> </para>
</note> </note>
@ -610,7 +610,7 @@
<link linkend="ini.session.gc-maxlifetime">session.gc_maxlifetime</link>=[выбрать наименьший из возможных] <link linkend="ini.session.gc-maxlifetime">session.gc_maxlifetime</link>=[выбрать наименьший из возможных]
</para> </para>
<para> <para>
<literal>session.gc_maxlifetime</literal> настройка для удаления устаревших <link linkend="ini.session.gc-maxlifetime">session.gc_maxlifetime</link> настройка для удаления устаревших
идентификаторов сессий. Полагаться на эту опцию категорически идентификаторов сессий. Полагаться на эту опцию категорически
<emphasis>не</emphasis> рекомендуется. <emphasis>не</emphasis> рекомендуется.
Вы должны управлять жизненным циклом сессии самостоятельно. Вы должны управлять жизненным циклом сессии самостоятельно.
@ -688,7 +688,7 @@
Если <link linkend="ini.session.use-trans-sid">session.use_trans_sid</link> Если <link linkend="ini.session.use-trans-sid">session.use_trans_sid</link>
включён, то рекомендуется использовать эту опцию, если это возможно. включён, то рекомендуется использовать эту опцию, если это возможно.
Это уменьшает риск для инъекции сессионного ID. Если ваш сайт Это уменьшает риск для инъекции сессионного ID. Если ваш сайт
находится по адресу http://example.com/, то установите этой опции значение http://example.com/. находится по адресу <literal>http://example.com/</literal>, то установите этой опции значение <literal>http://example.com/</literal>.
Обратите внимание, что при использовании HTTPS, браузер не отправляет Обратите внимание, что при использовании HTTPS, браузер не отправляет
referrer заголовок. Таким образом, этот параметр не является достаточно referrer заголовок. Таким образом, этот параметр не является достаточно
надёжным показателем безопасности, но, всё же, рекомендуется его использовать. надёжным показателем безопасности, но, всё же, рекомендуется его использовать.
@ -702,10 +702,10 @@
<para> <para>
Убедитесь, что содержимое HTTP не кешируется для аутентификационной сессии. Убедитесь, что содержимое HTTP не кешируется для аутентификационной сессии.
Допускается кешировать только неконфиденциальный контент. Иначе Допускается кешировать только неконфиденциальный контент. Иначе
содержимым могут воспользоваться. Можно использовать значение "private", содержимым могут воспользоваться. Можно использовать значение <literal>"private"</literal>,
если содержимое HTTP не содержит чувствительные к безопасности данные. Учтите, что если содержимое HTTP не содержит чувствительные к безопасности данные. Учтите, что
"private" может оставлять конфиденциальные данные в общем кеше клиентов. <literal>"private"</literal> может оставлять конфиденциальные данные в общем кеше клиентов.
Значение "public" можно использовать только, если HTTP-контент вообще не содержит Значение <literal>"public"</literal> можно использовать только, если HTTP-контент вообще не содержит
никаких конфиденциальных данных. никаких конфиденциальных данных.
</para> </para>
</listitem> </listitem>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: b6f10b97e0d9405144b6100110e935af24161ab6 Maintainer: sergey Status: ready --> <!-- EN-Revision: b676d0b9c968ebb0b7429835f2f6bd364275eed1 Maintainer: sergey Status: ready -->
<!-- Reviewed: no --> <!-- Reviewed: no -->
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.utf8-decode"> <refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.utf8-decode">
<refnamediv> <refnamediv>
@ -131,6 +131,107 @@ string(1) "?"
</example> </example>
</refsect1> </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"> <refsect1 role="seealso">
&reftitle.seealso; &reftitle.seealso;
<para> <para>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: b6f10b97e0d9405144b6100110e935af24161ab6 Maintainer: sergey Status: ready --> <!-- EN-Revision: b676d0b9c968ebb0b7429835f2f6bd364275eed1 Maintainer: sergey Status: ready -->
<!-- Reviewed: no --> <!-- Reviewed: no -->
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.utf8-encode"> <refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.utf8-encode">
<refnamediv> <refnamediv>
@ -122,6 +122,85 @@ echo bin2hex($utf8_string), "\n";
</example> </example>
</refsect1> </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
$iso8859_1_string = "\xEB"; // 'ë' (e с диерезисом) в UTF-8
$utf8_string = mb_convert_encoding($iso8859_1_string, 'UTF-8', 'ISO-8859-1');
echo bin2hex($utf8_string), "\n";
$iso8859_7_string = "\xEB"; // та же строка в ISO-8859-7 представляет собой 'λ' (греческая строчная лямбда)
$utf8_string = mb_convert_encoding($iso8859_7_string, 'UTF-8', 'ISO-8859-7');
echo bin2hex($utf8_string), "\n";
$windows_1252_string = "\x80"; // '€' (Знак евро) в Windows-1252, но не в ISO-8859-1
$utf8_string = mb_convert_encoding($windows_1252_string, 'UTF-8', 'Windows-1252');
echo bin2hex($utf8_string), "\n";
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
c3ab
cebb
e282ac
]]>
</screen>
</informalexample>
</para>
<para>
Другие опции, которые могут быть доступны в зависимости от установленных модулей:
<methodname>UConverter::transcode</methodname> и <function>iconv</function>.
</para>
<para>
Все следующие варианты дают один и тот же результат:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$iso8859_1_string = "\x5A\x6F\xEB"; // 'Zoë' в ISO-8859-1
$utf8_string = utf8_encode($iso8859_1_string);
echo bin2hex($utf8_string), "\n";
$utf8_string = mb_convert_encoding($iso8859_1_string, 'UTF-8', 'ISO-8859-1');
echo bin2hex($utf8_string), "\n";
$utf8_string = UConverter::transcode($iso8859_1_string, 'UTF8', 'ISO-8859-1');
echo bin2hex($utf8_string), "\n";
$utf8_string = iconv('ISO-8859-1', 'UTF-8', $iso8859_1_string);
echo bin2hex($utf8_string), "\n";
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
5a6fc3ab
5a6fc3ab
5a6fc3ab
5a6fc3ab
]]>
</screen>
</informalexample>
</para>
</note>
</refsect1>
<refsect1 role="seealso"> <refsect1 role="seealso">
&reftitle.seealso; &reftitle.seealso;
<para> <para>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 0c9c2dd669fe9395eaa73d487fbd160f9057429a Maintainer: aur Status: ready --> <!-- EN-Revision: 767338231c3e14c7be5399b8e2e0c3b60f7ae8dd Maintainer: aur Status: ready -->
<!-- Reviewed: no --> <!-- Reviewed: no -->
<refentry xml:id="function.urlencode" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> <refentry xml:id="function.urlencode" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv> <refnamediv>
@ -58,10 +58,19 @@
<programlisting role="php"> <programlisting role="php">
<![CDATA[ <![CDATA[
<?php <?php
$userinput = 'Data123!@-_ +';
echo "Пользовательские данные: $userinput\n";
echo '<a href="mycgi?foo=', urlencode($userinput), '">'; echo '<a href="mycgi?foo=', urlencode($userinput), '">';
?> ?>
]]> ]]>
</programlisting> </programlisting>
&example.outputs;
<screen role="html">
<![CDATA[
Пользовательские данные: Data123!@-_ +
<a href="mycgi?foo=Data123%21%40-_+%2B">
]]>
</screen>
</example> </example>
</para> </para>
<para> <para>
@ -70,11 +79,23 @@ echo '<a href="mycgi?foo=', urlencode($userinput), '">';
<programlisting role="php"> <programlisting role="php">
<![CDATA[ <![CDATA[
<?php <?php
$foo = 'Data123!@-_ +';
$bar = "Содержимое, отличное от $foo";
echo "foo: $foo\n";
echo "bar: $bar\n";
$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar); $query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
echo '<a href="mycgi?' . htmlentities($query_string) . '">'; echo '<a href="mycgi?' . htmlentities($query_string) . '">';
?> ?>
]]> ]]>
</programlisting> </programlisting>
&example.outputs;
<screen role="html">
<![CDATA[
foo: Data123!@-_ +
bar: Содержимое, отличное от Data123!@-_ +
<a href="mycgi?foo=Data123%21%40-_+%2B&amp;bar=Not+the+same+content+as+Data123%21%40-_+%2B">
]]>
</screen>
</example> </example>
</para> </para>
</refsect1> </refsect1>