2012-10-17 43 views
0

這是一個奇怪的問題,我不能看到一個簡單的解決方案。PHP DOM的挑戰 - 分析問題的JavaScript

如果您嘗試使用DOM來解析包含了一個javascript函數內的</head>標籤的文件,它不能正常工作。它將JavaScript函數中的</head>作爲關閉</head>標記。

我一直在冥思苦想好幾個小時了 - 任何想法?

<?php 
$contents = 
<<<EOF 
<!DOCTYPE html> 
<html><head> 
<script>function myFunc() { var myVar = "<head></head>"; } </script> 
</head> 
<body><p>This is a test</p></body> 
</html> 
EOF; 

//GET CONTENT & LOAD INTO DOM 
$doc = new DOMDocument('1.0', 'UTF-8'); 
$doc->loadHTML($contents); 

//STRIP OUT THE JAVASCRIPT 
$scripts = $doc->getElementsByTagName('script'); 
$length = $scripts->length; 
for ($i = 0; $i < $length; $i++) { 
    $scripts->item(0)->parentNode->removeChild($scripts->item(0)); 
} 

echo htmlentities($doc->saveHTML()); 

回答

1

常見的JavaScript問題:改用此:

var myVar = "<head><\/head>"; 
+0

它不是一個真正的JS的問題,這是一個瀏覽器解析問題。這使解析器不會認爲您的頭標籤正在腳本中關閉。更常見的做法是使用'「」' –

+0

雖然'「」'可能比較常見,但它不會比'「<\/head>」;'和'我會爭辯說' /'更容易閱讀。雙方完成同樣的事情..分手的字符串字面的''傑里米 –

+0

,太感謝你了 - 我通過改變''<\/head>如你所說修正了該問題,它出色的作品。我還注意到,加入一行: '$內容= str_replace函數( '', 「<\/head>」,$內容);' 也是出色的作品。我猜測這在某些方面不正確,但它的工作原理並避免了我搜索和替換所有舊的HTML文檔的需要。 – whizzkid

0

可以逃避,你不想解釋的字符。例如:

var myVar = "\x3chead\x3e\x3c/head\x3e"; 
console.log(myVar); 

將創建 「<頭> < /頭>」 沒有實際<>字符。