25.6. Работа с кодом HTML в PHP
Сама работа программиста на РНР связана так или иначе с HTML. Поэтому прежде чем приступать к изучению РНР, необходимо как минимум выучить основные понятия HTML. Не сомневаемся, что все вышесказанное вас не касалось, так как вы уже на должном уровне владеете HTML. В этом параграфе мы рассмотрим функции работы с кодом HTML.
Сам процесс создания скриптов неразрывно связан с HTML-тегами, поэтому было бы странно, если бы разработчики РНР не подумали в первую очередь о нас с вами и не создали функции работы с кодом HTML.
Мы расскажем о следующих функциях:
• nl2br(),
• htmlspecialchars(),
• htmlentities(),
• get_meta_tags().
Одна из самых простых функции nl2br() переводит символы новой строки в HTML-Синтаксис этой функции:
string nl2br(string string);
Возвращает string с <br>, вставляемыми перед каждой новой строкой.
Чтобы скрипт выводил строку с тегами и эти теги не воспринимались браузером как мета-теги, а, наоборот, отражались на экране браузера, используют функцию htmlspecialchars(). Она осуществляет перевод специальных символов в код HTML (см. табл. 25.1). Рассмотрим синтаксис функции:
string htmlspecialchars(string string [, int quote_style])
Некоторые символы имеют специальное значение в HTML и должны быть представлены HTML-объектами, если им необходимо сохранить свои значения. Функция htmlspecialchars() возвращает строку с некоторым преобразованием, это очень полезно использовать при частом Если нужно, чтобы
все особенности HTML-объекта были преобразованы, применяют функцию htmlentities() вместо htmlspecialchars().
Определенные символы имеют особое значение в HTML и должны быть заменены кодами HTML, если они такие имеют. Функция htmlspecialchars() возвращает строки с произведенными такими изменениями. Она полезна для очистки полученного от пользователя текста от разметки HTML (доски сообщений, гостевые книги).
Второй необязательный параметр, quote_style, сообщает функции, что делать с одинарными и двойными кавычками. ЕОТ_СОМРАТ является обратно совместимым способом, который только переводит символ с двойной кавычкой и оставляет непереведенную одинарную кавычку. Если ENT_QUOTES установлен, и одиночные, и двойные кавычки переведутся, а если установлен NOQUOTES — ни одиночные, ни двойные кавычки не будут переведены.
В табл. 25.1 приведены существующие замены:
Таблица 25.1. Преобразование специальных символов
ВНИМАНИЕ
Функция htmlspecialchars() не заменяет ничего, кроме указанного в табл. 25.1. Для полной обработки необходимо обратится к функции htmlentities(). Второй параметр в функции htmlspecialchars() был добавлен в РНР 3.0.17.
Рассмотрим пример:
<?php
$new = htmlspecialchars("<ahref = 'test'>Ссылка</а>" , ENT__QUOTES);
$new2 = htmlspecialchars("<h1>Текст с использованием знака амперсанда & </h1>");
echo $new."<br>";
echo $new2."<br>";
?>
Из примера видно, что функция позволяет выводить в первом случае все содержимое строки на экран браузера даже с учетом одинарных кавычек, во втором случаю основное внимание необходимо обратить на амперсанд (&). Результатом работы этого примера будут следующие строки:
<а href='test'>Ссылка</a>
<h1>Текст с использованием знака амперсанд & </h1>
Как видите, все осталось на своих местах и браузер даже не попытался произвести обработку приведенных тегов.
Аналогичной функцией является htmlentities(). Она позволяет переводить все возможные символы в коды HTML. Данная функция имеет синтаксис, аналогичный htmlspecialchars():
string htmlentities(string string [, int quote_style])
Все символы, которые имеют соответствующий код HTML, заменяются на этот HTML-код и будут видны в браузере.
В настоящее вр емя применяется кодовая таблица ISO-8859-1.
Второй параметр функции htmlentities() — quote_style — был добавлен в РНР3.0.17.
Функция get_meta_tags позволяет осуществлять работу с HTML-кодом, а в частности извлекать все содержимое атрибутов тега <meta> из файла и возвращать в массиве. Синтаксис функции get_meta_tags()
array get_meta_tags(string filename[, int use_include_path])
Функция get_meta_tags() возвращает ассоциативный массив, созданный на основании полученных атрибутов name и content тега <meta>. В этом массиве в качестве ключа, т. е. индекса ассоциативного массива, будет использоваться значение атрибута паше, а само возвращаемое значение данного элемента массива будет равно значению атрибута content, указанного в теге <meta>. Отсюда следует, что в дальнейшем вы можете без труда осуществлять операции с полученными значениями данного массива.
Специальные символы взначении, свойства заменяются символом «_», остальные переводятся в нижний регистр.
Элемент <meta> используется для включения различной информации о документе, а также представляет возможность сообщать дополнительные инструкции как клиентской части (браузеру), так и серверной. Он используется в форме «свойство—значение». Например, чтобы указать автора документа, используется следующая строка:
<meta name="Author" content="Pushkin">
В данном примере определяется свойство которому присваивается значение (Pushkin). Вы можете определять любые свойства и присваивать им любые значения.
ВНИМАНИЕ
Функция get_meta_tags() позволяет получать только свойства NAME и CONTENT. Другие совокупности атрибутов получить не удается.
Для примера создадимдва файла. Первый будет HTML-файл, содержащий следующую совокупность тегов HTML-страницы. Файл назовем newname.html:
<html>
<head>
<title>Test</title>
1. <meta name="Author" content="Pushkin">
2. <meta http-equiv="Content-Type" content="text/html">
3. <meta name="Copyright" content ="SinkORG">
4. <meta n^e="fescription" content="PHP, PHP3, PHP Documentation">
5. <meta name="Generator" content="FrontPage">
6. <meta name="Keywords" content="Documentation, PHP scripts">
</head>
<body>
Test
</body>
</html>
Здесь нас интересует пронумерованный блок с мета-тегами. Строка 1 описывает автора документа, строка 2 используется для указания инструкций серверу, 3 — информация об авторском праве, 4 — описание документа (применяется непосредственно для поисковых машин), 5 — название программы, с помощью которой создавался документ, 6 — ключевые слова (для поисковых машин). Теперь посмотрим, какие значения этих мета-тегов вернутся в ассоциативный массив. Пример скрипта приведен ниже:
<?php
$path = "Z:/home/localhost/www/newname.htm";
$arra = get_meta_tags($path);
print_r ($arra);
?>
Приведенный скрипт позволяет вывести на экран браузера ассоциативный массив значений атрибутов name и content. Значение атрибута name будет указано в качестве ключа ассоциативного массива, а принадлежащий этому атрибуту атрибут content будет указан в качестве значения массива. Получить доступ клюбому из них не составит никакого труда. Получений массив:
Array ([Author] => Pushkin [Copyright] => SinkORG [Description] => PHP, PHP3, PHP Documentation [Generator] => FrontPage [Keywords] => Documentation, PHP scripts)
Обратите что атрибут был возвращен в массив.
ВНИМАНИЕ
Установка параметра use_include_path со значением, равным "/", приведет к тому, что РНР будет пытаться открыть файл по стандартному пути include.
Описанные функции работы с HTML-тегами работают в РНР 3 и РНР 4.
В качестве исключения можно выделить функцию get_meta_tags(). Она используется в РНР 3-3.0.4 и РНР 4.