ΠŸΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ константы

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ константы ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ ΠΈ доступны, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π»ΠΈΠ±ΠΎ собрали Π² 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 (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для парсСров Ρ‚ΠΈΠΏΠ° pull, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ XMLReader).
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
9
@oneseventeen ΒΆ
15 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 ΒΆ
5 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
1
vetalstar at mail dot ru ΒΆ
8 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 ΒΆ
2 years 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 ΒΆ
16 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/>