#6.12 php web приложения Кодирование тегов HTML
Primary tabs
В предыдущем разделе теги просто удалялись из текста. Но что делать, если требуется отобразить текст, содержащий HTML-теги, но при этом ещё и обеспечить безопасность приложения? В этом случае уместно использовать функцию htmlentities, которая осуществляет кодирование тегов, преобразовывая их в последовательность специальных символов. Например, текст, <B>Bacn</B> будет преобразован в строку <B>Bacn</B>, которая при отображении её браузером выглядит как обычная строка. Использование этой функции приведено в примере 1.
Замечание
Начиная с PHP 4.0.3, в функцию добавлен необязательный параметр quote_style, который задает способ преобразования кавычек. Возможные его значения приведены в таблице 1. Начиная с PHP 4.1.0 в функцию добавлен третий необязательный аргумент charset, который задает используемую кодировку текста. При обработке англоязычных данных это не так важно, но при работе с кирилицей кодировка должна быть задана явно. По умолчанию используется кодировка ISO-8859-IJ. Наиболее употребительные значения параметра приведены в таблице 2.
|
Таблица 1. Возможные значения параметра quote_style
| Значение | Описание |
| ENT_COMPAT | Преобразуются двойные кавычки, одинарные остаются без изменений |
| ENT_QUOTES | Преобразуются и двойные, и одинарные кавычки |
| ENT_NOQUOTES | И двойные, и одинарные кавычки остаются без изменений |
Таблица 2. Возможные значения параметра charset
| Кодировка | Псевдоними | Описание |
| ISO-8859-1 | ISO8859-1 | Западно-европейская Latin-1 |
| ISO-8859-15 | ISO8859-15 | Западно-европейская Latin-9. Добавляет знак евро, французские и финские буквы к кодировке Latin-1(ISO-8859-1). |
| UTF-8 | 8-битная Unicode, совместимая с ASCII. | |
| cp866 | ibm866, 866 | Кириллическая кодировка, применяемая в DOS. Поддерживается в версии 4.3.2. |
| cp1251 | Windows-1251, win-1251, 1251 | Кириллическая кодировка, применяемая в Windows. Поддерживается в версии 4.3.2. |
| cp1252 | Windows-1252, 1252 | Западно-европейская кодировка, применяемая в Windows. |
| KOI8-R | koi8-ru, koi8r | Русская кодировка. Поддерживается в версии 4.3.2. |
Пример 1. Кодирование HTML-тегов
<HTML>
<HEAD>
<TITLE>
Кодирование тегов
</TITLE>
</HEAD>
<BODY>
<CENTER>
<H1>Кодирование тегов</H1>
<?php
$errors = array();
if (isset($_REQUEST["seen_already"])) {
validate_data();
if (count($errors) > 0) {
display_errors();
display_form();
} else {
process_data();
}
} else {
display_form();
}
function validate_data()
{
global $errors;
if($_REQUEST["Name"] == "")
{
$errors[] = "<FONT COLOR='RED'>Имя обязательно для ввода</FONT>";
}
}
function display_errors()
{
global $errors;
foreach ($errors as $err)
{
echo $err, "<BR>";
}
}
function process_data()
{
echo "Ваше имя: ";
$ok_text = htmlentities($_REQUEST["Name"], ENT_QUOTES, 'UTF8');
echo $ok_text;
}
function display_form()
{
echo "<FORM METHOD='POST' ACTION='phpencode.php'>";
echo "Введите ваше имя:";
echo "<BR>";
echo "<INPUT NAME='Name' TYPE='TEXT'>";
echo "<BRxBR>";
echo "<INPUT TYPE=SUBMIT VALUE='OK'>";
echo "<INPUT TYPE=HIDDEN NAME='seen_already'
VALUE= 'data'>";
echo "</FORM>";
}
?>
</CENTER>
</BODY>
</HTML>
На этот раз, если пользователь ввел текст, содержащий HTML-теги, как на рисунке 1, то при формировании страницы теги сохранятся, но в этом случае они будут представлять из себя просто текст (см. рисунк 2).

- Log in to post comments
- 970 reads