1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-26 00:32:15 +01:00
Files
archived-doc-ru/reference/strings/functions/htmlspecialchars.xml
2024-03-28 06:43:17 +03:00

362 lines
16 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: eabde0419cf90f596f60db00e31fcb6ebe41ac55 Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.htmlspecialchars" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>htmlspecialchars</refname>
<refpurpose>Преобразовывает специальные символы в HTML-сущности</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>string</type><methodname>htmlspecialchars</methodname>
<methodparam><type>string</type><parameter>string</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>flags</parameter><initializer>ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401</initializer></methodparam>
<methodparam choice="opt"><type class="union"><type>string</type><type>null</type></type><parameter>encoding</parameter><initializer>&null;</initializer></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>double_encode</parameter><initializer>&true;</initializer></methodparam>
</methodsynopsis>
<para>
Ряд символов в HTML несёт отдельный смысл и для сохранения значения такие
символы представляют HTML-сущностями. Функция возвращает строку с этими
преобразованиями. Вместо этой функции вызывают функцию <function>htmlentities</function>,
когда требуется перевести каждую входную подстроку, у которой есть
связанная именованная сущность.
</para>
<para>
Если у входной строки, которую передали в эту функцию, и результирующего документа
одинаковый набор символов, то этой функции хватит, чтобы подготовить
входные данные для вставки в бо́льшую часть контекстов HTML-документа. Однако, если
данные содержат символы, которые не закодированы в наборе символов результирующего документа,
и требуется сохранить эти символы (как числовые или именованные сущности),
то как этой функции, так и функции <function>htmlentities</function> (которые
преобразовывают только подстроки, у которых есть эквивалентные именованные сущности),
будет недостаточно. Вместо них пользуются функцией <function>mb_encode_numericentity</function>.
</para>
<para>
<table>
<title>Преобразования</title>
<tgroup cols="2">
<thead>
<row>
<entry>Символ</entry>
<entry>Замена</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>&amp;</literal> (амперсанд)</entry>
<entry><literal>&amp;amp;</literal></entry>
</row>
<row>
<entry><literal>&quot;</literal> (двойные кавычки)</entry>
<entry><literal>&amp;quot;</literal>, без флага <constant>ENT_NOQUOTES</constant></entry>
</row>
<row>
<entry><literal>'</literal> (одинарные кавычки)</entry>
<entry>
<literal>&amp;#039;</literal> для документов стандарта <constant>ENT_HTML401</constant>
или <literal>&amp;apos;</literal>
для документов стандартов <constant>ENT_XML1</constant>, <constant>ENT_XHTML</constant>
или <constant>ENT_HTML5</constant>,
но только с флагом <constant>ENT_QUOTES</constant>
</entry>
</row>
<row>
<entry><literal>&lt;</literal> (меньше)</entry>
<entry><literal>&amp;lt;</literal></entry>
</row>
<row>
<entry><literal>&gt;</literal> (больше)</entry>
<entry><literal>&amp;gt;</literal></entry>
</row>
</tbody>
</tgroup>
</table>
</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>flags</parameter></term>
<listitem>
<para>
Битовая маска из следующих флагов, которые определяют, как обрабатывать кавычки,
неправильные последовательности кодовых единиц и тип документа.
Флаги по умолчанию: <literal>ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401</literal>.
<table>
<title>
Доступные значения параметра <parameter>flags</parameter>
</title>
<tgroup cols="2">
<thead>
<row>
<entry>Название константы</entry>
<entry>Описание</entry>
</row>
</thead>
<tbody>
<row>
<entry><constant>ENT_COMPAT</constant></entry>
<entry>Преобразовывает двойные кавычки, одинарные кавычки не изменяются.</entry>
</row>
<row>
<entry><constant>ENT_QUOTES</constant></entry>
<entry>Преобразовывает как двойные, так и одинарные кавычки.</entry>
</row>
<row>
<entry><constant>ENT_NOQUOTES</constant></entry>
<entry>Оставляет без изменения как двойные, так и одинарные кавычки.</entry>
</row>
<row>
<entry><constant>ENT_IGNORE</constant></entry>
<entry>
Без предупреждения отбрасывает неправильные последовательности кодовых единиц
вместо возврата пустой строки. Передача этого флага не рекомендуется,
поскольку это <link xlink:href="&url.delete.nonchars;">небезопасно</link>.
</entry>
</row>
<row>
<entry><constant>ENT_SUBSTITUTE</constant></entry>
<entry>
Заменяет неправильные последовательности кодовых единиц символом замены
Юникода вместо возврата пустой строки: U+FFFD для строк в кодировке UTF-8
и &amp;#FFFD; для строк в других кодировках.
</entry>
</row>
<row>
<entry><constant>ENT_DISALLOWED</constant></entry>
<entry>
Заменяет неверные кодовые точки для заданного типа документа символом
замены юникода U+FFFD для строк в кодировке UTF-8 или &amp;#FFFD;
для строк в других кодировках вместо того, чтобы оставлять всё как есть.
Это бывает полезно для правильного оформления XML-документов,
в которые встроили внешнее содержимое.
</entry>
</row>
<row>
<entry><constant>ENT_HTML401</constant></entry>
<entry>
Обрабатывает код по правилам стандарта HTML 4.01.
</entry>
</row>
<row>
<entry><constant>ENT_XML1</constant></entry>
<entry>
Обрабатывает код по правилам стандарта XML 1.
</entry>
</row>
<row>
<entry><constant>ENT_XHTML</constant></entry>
<entry>
Обрабатывает код по правилам стандарта XHTML.
</entry>
</row>
<row>
<entry><constant>ENT_HTML5</constant></entry>
<entry>
Обрабатывает код по правилам стандарта HTML 5.
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>encoding</parameter></term>
<listitem>
&strings.parameter.encoding;
<para>
Для целей этой функции кодировки
<literal>ISO-8859-1</literal>, <literal>ISO-8859-15</literal>,
<literal>UTF-8</literal>, <literal>cp866</literal>,
<literal>cp1251</literal>, <literal>cp1252</literal>
и <literal>KOI8-R</literal> практически эквивалентны, при условии,
что сама строка <parameter>string</parameter> содержит допустимые
для заданной кодировки символы, поскольку символы, которые изменяет функция
<function>htmlspecialchars</function>, занимают одинаковые позиции
в перечисленных кодировках.
</para>
&reference.strings.charsets;
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>double_encode</parameter></term>
<listitem>
<para>
Когда параметр <parameter>double_encode</parameter> отключён,
PHP не будет кодировать существующие HTML-сущности.
По умолчанию функция преобразовывает каждый символ.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Функция возвращает преобразованную строку (<type>string</type>).
</para>
<para>
Функция вернёт пустую строку, если входная строка <parameter>string</parameter>
содержит недопустимую для кодировки <parameter>encoding</parameter> последовательность
кодовых единиц, если только не установили флаг <constant>ENT_IGNORE</constant>
или <constant>ENT_SUBSTITUTE</constant>.
</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.1.0</entry>
<entry>
Значение по умолчанию для параметра <parameter>flags</parameter>
изменили с <constant>ENT_COMPAT</constant>
на <constant>ENT_QUOTES</constant> | <constant>ENT_SUBSTITUTE</constant>
| <constant>ENT_HTML401</constant>.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>
Пример использования функции <function>htmlspecialchars</function>
</title>
<programlisting role="php">
<![CDATA[
<?php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
Обратите внимание, функция выполняет только описанные преобразования.
Для преобразования всех символов вызывают функцию <function>htmlentities</function>.
</para>
</note>
<note>
<para>
Когда значение параметра <parameter>flags</parameter> неоднозначно,
функция применяет следующие правила:
</para>
<para>
<itemizedlist>
<listitem>
<simpara>
Значением по умолчанию становится флаг <constant>ENT_NOQUOTES</constant>,
если одновременно отсутствуют флаги <constant>ENT_COMPAT</constant>,
<constant>ENT_QUOTES</constant> и <constant>ENT_NOQUOTES</constant>.
</simpara>
</listitem>
<listitem>
<simpara>
Если одновременно присутствуют два или более флага <constant>ENT_COMPAT</constant>,
<constant>ENT_QUOTES</constant> и <constant>ENT_NOQUOTES</constant>,
у флага <constant>ENT_QUOTES</constant> будет больший приоритет.
Следующим по приоритету будет флаг <constant>ENT_COMPAT</constant>.
</simpara>
</listitem>
<listitem>
<simpara>
Флагом по умолчанию становится флаг <constant>ENT_HTML401</constant>,
если не установили ни одну из констант <constant>ENT_HTML401</constant>, <constant>ENT_HTML5</constant>,
<constant>ENT_XHTML</constant> и <constant>ENT_XML1</constant>.
</simpara>
</listitem>
<listitem>
<simpara>
Если одновременно установили больше одного флага <constant>ENT_HTML401</constant>,
<constant>ENT_HTML5</constant>, <constant>ENT_XHTML</constant>, <constant>ENT_XML1</constant>,
приоритет будет таким: <constant>ENT_HTML5</constant>, затем <constant>ENT_XHTML</constant>,
<constant>ENT_XML1</constant>, а потом флаг <constant>ENT_HTML401</constant>.
</simpara>
</listitem>
<listitem>
<simpara>
Если одновременно установили больше одного флага <constant>ENT_DISALLOWED</constant>,
<constant>ENT_IGNORE</constant>, <constant>ENT_SUBSTITUTE</constant>,
высший приоритет будет у флага <constant>ENT_IGNORE</constant>,
а следующий за ним — у флага <constant>ENT_SUBSTITUTE</constant>.
</simpara>
</listitem>
</itemizedlist>
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>get_html_translation_table</function></member>
<member><function>htmlspecialchars_decode</function></member>
<member><function>strip_tags</function></member>
<member><function>htmlentities</function></member>
<member><function>nl2br</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
-->