Следующие константы определяются модулем и доступны, только если модуль либо собрали в PHP, либо динамически загрузили при выполнении кода.
LIBXML_BIGLINES
(int )
Замечание:
Константа доступна с PHP 7.0.0 с библиотекой Libxml >= 2.9.0
LIBXML_COMPACT
(int )
Замечание:
Доступна только в Libxml >= 2.6.21
LIBXML_DTDATTR
(int )
Включение загрузки 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 способствует XXE-атакам (англ. сокр.: XML External Entity).
С PHP 8.4.0 и библиотеки Libxml >= 2.13.0 доступна константа LIBXML_NO_XXE ,
которая подавляет загрузку из внешних источников.
LIBXML_HTML_NOIMPLIED
(int )
Замечание:
Константа доступна только в библиотеке Libxml >= 2.7.7 с PHP >= 5.4.0
LIBXML_HTML_NODEFDTD
(int )
Замечание:
Константа доступна только в библиотеке Libxml >= 2.7.8 с PHP >= 5.4.0
LIBXML_LOADED_VERSION
(string )
LIBXML_NOBLANKS
(int )
LIBXML_NOCDATA
(int )
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 )
Замечание:
Доступна только в Libxml >= 2.6.21
LIBXML_NO_XXE
(int )
Замечание:
Константа доступна только в библиотеке Libxml >= 2.13.0 с PHP 8.4.0.
LIBXML_NSCLEAN
(int )
LIBXML_PARSEHUGE
(int )
Поскольку это увеличивает жёстко заданные лимиты, флаг следует использовать только с доверенными данными. Повышение лимита глубины при обработке ненадёжного ввода может привести к чрезмерному потреблению ресурсов, например к переполнению стека при обработке глубоко вложенного документа.
Замечание:
Доступно только в Libxml >= 2.7.0 (начиная с PHP >= 5.3.2 и PHP >= 5.2.12)
LIBXML_PEDANTIC
(int )
Замечание:
Доступно с PHP >= 5.4.0
LIBXML_RECOVER
(int )
Замечание:
Константа доступна начиная с PHP 8.4.0
LIBXML_XINCLUDE
(int )
LIBXML_ERR_ERROR
(int )
LIBXML_ERR_FATAL
(int )
LIBXML_ERR_NONE
(int )
LIBXML_ERR_WARNING
(int )
LIBXML_VERSION
(int )
LIBXML_DOTTED_VERSION
(string )
LIBXML_SCHEMA_CREATE
(int )
Замечание:
Константа доступна только в библиотеке Libxml >= 2.6.14 с PHP >= 5.5.2
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!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.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);
?>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.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/>