2012-12-06 31 views
3

我正在使用DOMDocument加載一些用戶貢獻的HTML塊,然後操縱它們。它似乎(假設我正在做的一切正確)DOMDocument通過htmlentities運行href屬性內的URL。這使得我的查詢字符串中有&符號的錨標籤出現錯誤。DOMDocument saveHTML錯誤地編碼href屬性

實施例:

$html = <<<HTML 
<a href="http://foo.com?bar=baz&foo=bar">Foo</a> 
HTML; 

$dom = new DOMDocument; 
$dom->loadHTML($html); 

echo $dom->saveHTML(); 

輸出成爲(請注意在URL中的&轉化成&amp;):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html><body><a href="http://foo.com?bar=baz&amp;foo=bar">Foo</a></body></html> 

此外,在調用期間$dom->loadHTML($html);以下警告分別輸出.. 。

Warning:DOMDocument :: loadHTML():htm lParseEntityRef:期待';'在 實體,行數:1

我不知道這意味着什麼。

我錯過了什麼嗎?

+0

這意味着你的HTML是無效的開始 - 這些'應該是'&'s。 – Jon

+1

HTML中的'&'*任何地方都*自從時間開始*從未有效,並且*仍然不是*([自己動手嘗試](http://html5.validator.nu))。只是因爲每個人都錯誤地認爲瀏覽器已經對這種鬆散的問題進行了解析,並且HTML5創建了「(un)歧義&符號」概念來形式化該解析,以便錯誤恢復和解析的DOM在各個瀏覽器中保持一致。但你應該總是***寫'&'! (對不起,這是我的一個壞HTML寵物。) –

+0

@FrancisAvila謝謝。我不認爲這是href屬性中的情況,因爲這不是向瀏覽器呈現標記,而是定義一個url,這是一個完全合法的字符。你是正確的,但。由於我的內容來自用戶,誰將毫無疑問地產生像我這樣的例子,有沒有辦法讓DOMDocument忽略這種情況,不會產生警告,或者我必須訴諸在php(@符號)的錯誤抑制? –

回答

2

符號符號用於有效/符合XHTML以確定HTML實體字符。

看到這個參考列表: http://www.w3schools.com/tags/ref_entities.asp

,因爲它在檢測的方式無效字符定義你的DOMDocument抱怨,並修正它的出路。