2014-01-25 31 views
3

這個PHP腳本,

$dom = new DOMDocument(); 
    $dom->substituteEntities =FALSE; 
    $dom->loadHTML('<a href="$a?">$a</a>'); 
    // print_r ($dom->getElementsByTagName("a")->item(0)->getAttribute("href")); 

//上面的語句顯示美元?正確

echo $dom->saveHTML(); 

但它返回< A HREF = 「%24A」 > $一個</A >到瀏覽器時,saveHTML方法被調用。 href屬性中的$變成了%24,而a標籤內容中的$保持不變。

我期望的輸出是< A HREF = 「$ A」 > $一個</A > 有沒有辦法從替代方法做這一邊?

順便說一句,

echo $dom->saveXML(); 

我得到了我想要與saveXML(); ! 但加上一個意想不到的< - XML ...... 感謝

+1

那麼,['''在URL中無效](http://stackoverflow.com/questions/7109143/what-c​​haracters-are-valid-in-a-url)。你想保持無效的href的任何特殊原因? – Wrikken

+0

感謝您的回覆,這是由於Web服務的需求。他們使用$ XXX作爲變量來爲其注入腳本。 – user3204729

+2

嗯,是的,所以'不 - 非常 - 但 - 幾乎'它是..真的很棘手。如果HTML片段不包含會使其偏離「XML」標準的內容,替代接受的答案是保存一個節點而不是while文檔,以防止xml序言被保存爲像$ dom-> saveXML ($ dom-> documentElement);',但它有它自己的quircks和缺點。目前的人會有一個缺點,如果你需要urlencoded,你必須對它進行雙重編碼。所以,請選擇適合自己的最佳選擇;) – Wrikken

回答

-3

你可以用在urldecode回聲來解決這個問題:

echo urldecode($dom->saveHTML()); 
+1

如果'urldecode'解碼不需要的字符怎麼辦? – Epoc

+0

urldecode只能在特定的部分完成,如https://stackoverflow.com/questions/29448119/how-can-i-prevent-html-entities-with-php-a-domdocumentsavehtml –

0

於我而言更安全的方法是使用:

$dom->saveXML();