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

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"?>
<!-- EN-Revision: cdc9d28d334bbc08386fecf8aade66080004a9dd Maintainer: sergey Status: ready -->
<!-- EN-Revision: 6dd0689d9143fa9a06dcbbf03688cd739a8a6219 Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<book xml:id="mongodb.architecture" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<titleabbrev>Архитектура и внутреннее устройство драйвера</titleabbrev>
@ -674,6 +674,24 @@ class UpperClass implements MongoDB\BSON\Persistable {
</listitem>
</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>
<term>любая другая строка</term>
<listitem>
@ -718,7 +736,9 @@ class UpperClass implements MongoDB\BSON\Persistable {
<methodname>MongoDB\Driver\Cursor::setTypeMap</methodname> для объекта
<classname>MongoDB\Driver\Cursor</classname> или аргумента
<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>array</emphasis>) может быть задан индивидуально, в дополнение
к типам полей.

View File

@ -1,29 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 4691215483797da841e61de00eef8adba2960d21 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 52c3812df42c03188138c6930e49ecd7188f0e86 Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="mongodb-bson-int64.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>MongoDB\BSON\Int64::__construct</refname>
<refpurpose>Создаёт новый Int64 (не используется)</refpurpose>
<refpurpose>Создаёт новый Int64</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<modifier>final</modifier> <modifier>private</modifier> <methodname>MongoDB\BSON\Int64::__construct</methodname>
<void/>
<modifier>final</modifier> <modifier>public</modifier> <methodname>MongoDB\BSON\Int64::__construct</methodname>
<methodparam><type class="union"><type>int</type><type>string</type></type><parameter>value</parameter></methodparam>
</methodsynopsis>
<para>
<classname>MongoDB\BSON\Int64</classname> объекты создаются путём
преобразования из 64-разрядного целочисленного типа BSON на 32-разрядной платформе и не могут быть
созданы напрямую.
Создаёт новый экземпляр <classname>MongoDB\BSON\Int64</classname>
для заданного целого числа.
</para>
</refsect1>
<refsect1 role="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 role="seealso">

View File

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

View File

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

View File

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

View File

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

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: b6f10b97e0d9405144b6100110e935af24161ab6 Maintainer: sergey Status: ready -->
<!-- EN-Revision: b676d0b9c968ebb0b7429835f2f6bd364275eed1 Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.utf8-encode">
<refnamediv>
@ -122,6 +122,85 @@ echo bin2hex($utf8_string), "\n";
</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
$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">
&reftitle.seealso;
<para>

View File

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