PHP Conference Japan 2024

預定義常數

以下常數由此擴充定義,並且只有在擴充已編譯到 PHP 中或在執行時動態載入時才會可用。

LIBXML_BIGLINES (整數)
允許正確回報大於 65535 的行號。

注意:

僅適用於 Libxml >= 2.9.0 的 PHP 7.0.0 及更高版本

LIBXML_COMPACT (整數)
啟用小型節點配置最佳化。這可以加快應用程式的速度,而無需更改程式碼。

注意:

僅適用於 Libxml >= 2.6.21

LIBXML_DTDATTR (整數)
預設 DTD 屬性
警告

啟用 DTD 屬性載入將會啟用外部實體的擷取。LIBXML_NO_XXE 常數可用於防止此情況(僅在 Libxml >= 2.13.0,PHP 8.4.0 起可用)。

LIBXML_DTDLOAD (整數)
載入外部子集
警告

啟用外部子集的載入將會啟用外部實體的擷取。LIBXML_NO_XXE 常數可用於防止此情況(僅在 Libxml >= 2.13.0,PHP 8.4.0 起可用)。

LIBXML_DTDVALID (整數)
使用 DTD 驗證
警告

啟用 DTD 驗證可能會助長 XML 外部實體 (XXE) 攻擊。LIBXML_NO_XXE 常數可用於防止此情況(僅在 Libxml >= 2.13.0,PHP 8.4.0 起可用)。

LIBXML_HTML_NOIMPLIED (整數)
設定 HTML_PARSE_NOIMPLIED 旗標,關閉自動添加隱含的 html/body... 元素。

注意:

僅在 Libxml >= 2.7.7(PHP >= 5.4.0 起)可用

LIBXML_HTML_NODEFDTD (整數)
設定 HTML_PARSE_NODEFDTD 旗標,防止在找不到文件類型定義 (DOCTYPE) 時添加預設的 DOCTYPE。

注意:

僅在 Libxml >= 2.7.8(PHP >= 5.4.0 起)可用

LIBXML_LOADED_VERSION (字串)
libxml 核心剖析器模組的版本。
LIBXML_NOBLANKS (整數)
移除空白節點
LIBXML_NOCDATA (整數)
將 CDATA 合併為文字節點
LIBXML_NOEMPTYTAG (整數)
展開空標籤(例如,將 <br/> 展開為 <br></br>

注意:

此選項目前僅在 DOMDocument::saveDOMDocument::saveXML 函式中可用。

LIBXML_NOENT (整數)
替換實體
警告

啟用實體替換可能會助長 XML 外部實體 (XXE) 攻擊。

LIBXML_NOERROR (整數)
抑制錯誤報告
LIBXML_NONET (整數)
載入文件時停用網路存取
LIBXML_NOWARNING (整數)
抑制警告報告
LIBXML_NOXMLDECL (整數)
儲存文件時捨棄 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 則註釋

@oneseventeen
13 年前
當我使用以下程式碼將 XML DOM 元素插入從 XML 檔案載入的現有 XML DOM 元素內時,我的新元素都沒有正確格式化,它們只顯示在一行上

<?php
$dom
= DOMDocument::load('file.xml');
$dom->formatOutput = true;
//$dom->使用 insertBefore(); 在載入的 XML 中的某處添加一些帶有子節點的新元素
$dom->saveXML();
//輸出:一切看起來都很正常,但新節點都在同一行。
?>

我發現我可以將 LIBXML_NOBLANKS 傳遞給 load 方法,它會重新格式化整個文件,包括我添加的內容。
<?php
$dom
= DOMDocument::load('file.xml', LIBXML_NOBLANKS);
$dom->formatOutput = true;
//$dom->使用 insertBefore(); 在載入的 XML 中的某處添加一些帶有子節點的新元素
$dom->saveXML();
//輸出:一切都以新的格式顯示,包括新的節點
?>

希望這能有所幫助,我花了數小時的試錯才弄清楚這一點!
siraic at gmail dot com
3 年前
常數 LIBXML_NOENT 的名稱非常容易誤導。添加此標誌實際上會導致解析器載入並插入外部實體。省略它會使標籤保持不變,這可能是您想要的。
vetalstar at mail dot ru
7 年前
LIBXML_DOTTED_VERSION 選項無效。
libxml 版本:2.9.4

<?php

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

?>
Ismael Miguel
1 年前
如果您想要儲存但不包含 XML 宣告,並且 LIBXML_NOXMLDECL 對您無效,您可以這樣做:

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

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

這將輸出不帶 XML 宣告的 XML,並且不使用該標誌。
您也不需要進行繁瑣的替換並祈禱它能正常工作。
zachatwork at gmail dot com
14 年前
注意:LIBXML_NOXMLDECL 常數在此程式庫中定義,但 DOMDocument(尚)不支援。

另請參閱: 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 />");

# 這應該要能運作,但實際上不行。

print "DOMDocument 沒有遵守 LIBXML_NOXMLDECL:\n";
print
$dom->saveXML(null,LIBXML_NOXMLDECL);

# 這個方法可行,且在上述問題修復後仍可繼續使用。

print "向前相容的解決方案:\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 沒有遵守 LIBXML_NOXMLDECL
<?xml version="1.0"?>
<foo/>
向前相容的解決方案
<foo/>
To Top