第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么這兩個 DOMDocument 函數(shù)的行為不同?

為什么這兩個 DOMDocument 函數(shù)的行為不同?

PHP
MMTTMM 2022-08-19 16:05:39
這里建議有兩種方法可以獲取 DOMDocument 節(jié)點的外部 HTML:如何返回 DOMDocument 的外部 html?我感興趣的是為什么他們似乎以不同的方式對待HTML實體。例:function outerHTML($node) {    $doc = new DOMDocument();    $doc->appendChild($doc->importNode($node, true));    return $doc->saveHTML();}$html = '<p>ACME&rsquo;s 27&rdquo; Monitor is $200.</p>';$dom = new DOMDocument();@$dom->loadHTML($html);$el = $dom->getElementsByTagname('p')->item(0);echo $el->ownerDocument->saveHtml($el) . PHP_EOL;echo outerHTML($el) . PHP_EOL;輸出:<p>ACME’s 27” Monitor is $200.</p><p>ACME&rsquo;s 27&rdquo; Monitor is $200.</p>這兩種方法都使用 saveHTML(),但由于某種原因,該函數(shù)在最終輸出中保留了 html 實體,而直接使用節(jié)點上下文調(diào)用則不會。誰能解釋一下為什么 - 最好有某種權(quán)威的參考?saveHTML()
查看完整描述

1 回答

?
呼喚遠方

TA貢獻1856條經(jīng)驗 獲得超11個贊

歸根結(jié)底,這比上面的測試用例還要簡單:


<?php

$html = '<p>ACME&rsquo;s 27&rdquo; Monitor is $200.</p>';

$dom = new DOMDocument();

@$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);


echo $dom->saveHtml($dom->documentElement) . PHP_EOL;

echo $dom->saveHtml() . PHP_EOL;

那么問題來了,為什么在保存整個文檔而不僅僅是一個特定的節(jié)點時,行為會有所不同?DomDocument::saveHtml

通過查看PHP源代碼,我們會發(fā)現(xiàn)它是使用單個節(jié)點還是整個文檔進行檢查。對于前者,調(diào)用該函數(shù)時,編碼顯式設(shè)置為 null。對于后者,使用函數(shù),編碼不作為此函數(shù)的參數(shù)包含在內(nèi)。htmlNodeDumpFormatOutputhtmlDocDumpMemoryFormat

這兩個函數(shù)都來自 libxml2 庫。查看源,我們可以看到嘗試檢測文檔編碼,并在找不到文檔編碼時將其顯式設(shè)置為ASCII / HTML。htmlDocDumpMemoryFormat

這兩個函數(shù)最終都調(diào)用htmlNodeListDumpOutput,并為其傳遞已確定的編碼;null ( 不會導致編碼 – 或 ASCII/HTML – 使用 HTML 實體進行編碼。

我的猜測是,對于文檔片段或單個節(jié)點,編碼被認為不如完整文檔重要。


查看完整回答
反對 回復 2022-08-19
  • 1 回答
  • 0 關(guān)注
  • 134 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號