PHP 8.4.2 Released!

Предопределённые константы

Модуль определяет перечисленные константы и открывает доступ к константам только тогда, когда модуль либо собрали в PHP, либо динамически загрузили во время исполнения кода.

LIBXML_BIGLINES (int)
Разрешает корректно сообщать о номерах строк больше 65535.

Замечание:

Константа доступна с PHP 7.0.0 с библиотекой Libxml >= 2.9.0

LIBXML_COMPACT (int)
Активирует оптимизацию выделения памяти для небольших узлов. Иногда это повышает быстродействие приложения без внесения изменений в коде.

Замечание:

Доступна только в Libxml >= 2.6.21

LIBXML_DTDATTR (int)
DTD-атрибуты по умолчанию.
Предостережение

Включение загрузки DTD-атрибутов включит получение внешних сущностей. С PHP 8.4.0 и библиотеки Libxml >= 2.13.0 доступна константа LIBXML_NO_XXE, которая подавляет загрузку из внешних источников.

LIBXML_DTDLOAD (int)
Загрузка внешнего подмножества.
Предостережение

Включение загрузки внешних подмножеств включит получение внешних сущностей. С PHP 8.4.0 и библиотеки Libxml >= 2.13.0 доступна константа LIBXML_NO_XXE, которая подавляет загрузку из внешних источников.

LIBXML_DTDVALID (int)
Проверка корректности документа через DTD.
Предостережение

Включение проверки DTD способствует XXE-атакам (англ. сокр.: XML External Entity). С PHP 8.4.0 и библиотеки Libxml >= 2.13.0 доступна константа LIBXML_NO_XXE, которая подавляет загрузку из внешних источников.

LIBXML_HTML_NOIMPLIED (int)
Устанавливает флаг HTML_PARSE_NOIMPLIED, который отключает автоматическое добавление недостающих HTML, BODY и других элементов.

Замечание:

Константа доступна только в библиотеке Libxml >= 2.7.7 с PHP >= 5.4.0

LIBXML_HTML_NODEFDTD (int)
Устанавливает флаг HTML_PARSE_NODEFDTD, который предотвращает добавление стандартного doctype, если он не был найден.

Замечание:

Константа доступна только в библиотеке Libxml >= 2.7.8 с PHP >= 5.4.0

LIBXML_LOADED_VERSION (string)
Версия модуля синтаксического анализатора ядра модуля libxml.
LIBXML_NOBLANKS (int)
Удаление пустых узлов.
LIBXML_NOCDATA (int)
Объединить CDATA как текстовые узлы.
LIBXML_NOEMPTYTAG (int)
Разворачивать пустые теги, например <br/> в <br></br>.

Замечание:

Эта настройка пока доступна только в функциях DOMDocument::save и DOMDocument::saveXML

LIBXML_NOENT (int)
Замещение сущностей.
Предостережение

Включение замещения объекта способствует XXE-атакам (англ. сокр.: XML External Entity).

LIBXML_NOERROR (int)
Запретить отчёты об ошибках.
LIBXML_NONET (int)
Отключить доступ к сети во время загрузки документов.
LIBXML_NOWARNING (int)
Запретить предупреждения.
LIBXML_NOXMLDECL (int)
Убрать объявление XML при сохранении документа.

Замечание:

Доступна только в Libxml >= 2.6.21

LIBXML_NO_XXE (int)
Отключить внешние сущности XML (XXE) при выполнении подстановки сущностей.

Замечание:

Константа доступна только в библиотеке Libxml >= 2.13.0 с PHP 8.4.0.

LIBXML_NSCLEAN (int)
Удалить лишние объявления пространств имён.
LIBXML_PARSEHUGE (int)
Установить флаг XML_PARSE_HUGE, который отключает жёстко заданный лимит в парсере. Это затрагивает как лимиты максимальной глубины документа или рекурсии элементов, так и лимиты размеров текстовых элементов.

Замечание:

Доступно только в Libxml >= 2.7.0 (начиная с PHP >= 5.3.2 и PHP >= 5.2.12)

LIBXML_PEDANTIC (int)
Устанавливает флаг XML_PARSE_PEDANTIC, который включает педантичный отчёт об ошибках.

Замечание:

Доступно с PHP >= 5.4.0

LIBXML_RECOVER (int)
Включить режим восстановления при разборе документа.

Замечание:

Константа доступна начиная с PHP 8.4.0

LIBXML_XINCLUDE (int)
Реализовать замещение XInclude.
LIBXML_ERR_ERROR (int)
Устранимая ошибка.
LIBXML_ERR_FATAL (int)
Фатальная ошибка.
LIBXML_ERR_NONE (int)
Нет ошибок.
LIBXML_ERR_WARNING (int)
Простое предупреждение.
LIBXML_VERSION (int)
Версия библиотеки libxml в виде 20605 или 20617.
LIBXML_DOTTED_VERSION (string)
Версия библиотеки libxml в виде 2.6.5 или 2.6.17.
LIBXML_SCHEMA_CREATE (int)
Создаёт со значением по умолчанию или фиксированные узлы при проверке схемы XSD.

Замечание:

Константа доступна только в библиотеке Libxml >= 2.6.14 с PHP >= 5.5.2

Добавить

Примечания пользователей 5 notes

up
8
@oneseventeen
13 years ago
When inserting XML DOM Elements inside existing XML DOM Elements that I loaded from an XML file using the following code, none of my new elements were formatted correctly, they just showed up on one line:

<?php
$dom
= DOMDocument::load('file.xml');
$dom->formatOutput = true;
//$dom->add some new elements with child nodes somewhere inside the loaded XML using insertBefore();
$dom->saveXML();
//output: everything looks normal but the new nodes are all on one line.
?>

I found I could pass LIBXML_NOBLANKS to the load method and it would reformat the whole document, including my added stuff:
<?php
$dom
= DOMDocument::load('file.xml', LIBXML_NOBLANKS);
$dom->formatOutput = true;
//$dom->add some new elements with child nodes somewhere inside the loaded XML using insertBefore();
$dom->saveXML();
//output: everything looks newly formatted, including new nodes
?>

Hope this helps, took me hours of trial and error to figure this out!
up
4
siraic at gmail dot com
3 years ago
The name of the constant LIBXML_NOENT is very misleading. Adding this flag actually causes the parser to load and insert the external entities. Omitting it leaves the tags untouched, which is probably what you want.
up
2
vetalstar at mail dot ru
7 years ago
LIBXML_DOTTED_VERSION option doesn't work.
libxml version: 2.9.4

<?php

echo LIBXML_DOTTED_VERSION;
$xml = new SimpleXMLElement('<fasa_request id="1234567"/>', LIBXML_NOXMLDECL);

?>
up
0
Ismael Miguel
1 year ago
If you want to save without the XML declaration, and LIBXML_NOXMLDECL doesn't work for you, you can just do this:

<?php
$doc
= new \DOMDocument('1.0', 'UTF-8');
$doc->loadXML($xml, LIBXML_*);

echo
$doc->saveXML($doc->firstElementChild);
?>

This will output the XML without the XML declaration and without using the flag.
You also don't need to do fiddly replacements and pray that it works.
up
0
zachatwork at gmail dot com
14 years ago
Note: The LIBXML_NOXMLDECL constant is defined in this library but is not supported by DOMDocument (yet).

See also: http://bugs.php.net/bug.php?id=47137

<?php

print "PHP_VERSION: ".PHP_VERSION."\n";
print
"LIBXML_VERSION: ".LIBXML_VERSION."\n";
print
"LIBXML_NOXMLDECL: ".LIBXML_NOXMLDECL."\n";

$dom = new DomDocument();
$dom->loadXML("<foo />");

# This should work but doesn't.

print "DOMDocument doesn't honor LIBXML_NOXMLDECL:\n";
print
$dom->saveXML(null,LIBXML_NOXMLDECL);

# This works, and will still work after the above is fixed.

print "Forwards compatible workaround:\n";
$lines = explode("\n", $dom->saveXML(null, LIBXML_NOXMLDECL), 2);
if(!
preg_match('/^\<\?xml/', $lines[0]))
print
$lines[0];
print
$lines[1];

?>

PHP_VERSION: 5.3.1-0.dotdeb.1
LIBXML_VERSION: 20632
LIBXML_NOXMLDECL: 2
DOMDocument doesn't honor LIBXML_NOXMLDECL:
<?xml version="1.0"?>
<foo/>
Forwards compatible workaround:
<foo/>
To Top