Tôi đã sử dụng @Alex's approach here để xóa thẻ tập lệnh khỏi tài liệu HTML bằng DOMDocument được tích hợp sẵn. Vấn đề là nếu tôi có một thẻ script với nội dung Javascript và sau đó một thẻ script khác liên kết đến một tệp nguồn Javascript bên ngoài, không phải tất cả các thẻ script đều bị xóa khỏi HTML.DOMDocument xóa thẻ tập lệnh khỏi nguồn HTML
$result = '
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>
hey
</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
alert("hello");
</script>
</head>
<body>hey</body>
</html>
';
$dom = new DOMDocument();
if($dom->loadHTML($result))
{
$script_tags = $dom->getElementsByTagName('script');
$length = $script_tags->length;
for ($i = 0; $i < $length; $i++) {
if(is_object($script_tags->item($i)->parentNode)) {
$script_tags->item($i)->parentNode->removeChild($script_tags->item($i));
}
}
echo $dom->saveHTML();
}
Các đầu ra mã trên:
<html>
<head>
<meta charset="utf-8">
<title>hey</title>
<script>
alert("hello");
</script>
</head>
<body>
hey
</body>
</html>
Như bạn có thể thấy từ kết quả, chỉ có thẻ script bên ngoài đã được gỡ bỏ. Tôi có thể làm gì để đảm bảo tất cả các thẻ tập lệnh đều bị xóa không?
Điều đó có hiệu quả, cảm ơn! – RandomCoder
Một giải pháp khác là chỉ lặp qua các phần tử theo thứ tự ngược lại. – CBroe