2008-08-26 75 views
9

Tôi đang tìm kiếm các phương pháp thao tác HTML tốt trong PHP. Ví dụ, vấn đề tôi hiện đang có là xử lý html không đúng định dạng.Thao tác DOM trong PHP

Tôi nhận được đầu vào mà trông giống như sau:

<div>This is some <b>text 

Như bạn thấy, html là mất tích đóng thẻ. Tôi có thể sử dụng regex hoặc một XML Parser để giải quyết vấn đề này. Tuy nhiên, có khả năng tôi sẽ phải thực hiện các thao tác DOM khác trong tương lai. Tôi tự hỏi nếu có bất kỳ thư viện PHP tốt nào xử lý thao tác DOM tương tự như cách Javascript xử lý với thao tác DOM.

+0

tôi sẽ chạy HTML bị thay đổi qua lọc HTML trước khi làm bất cứ điều gì khác với nó. – TRiG

Trả lời

11

PHP có a PECL extension that gives you access to the features of HTML Tidy. Tidy là một thư viện khá mạnh nên có thể lấy mã như vậy và đóng các thẻ theo cách thông minh.

Tôi sử dụng nó để xóa XML và HTML không đúng định dạng được gửi cho tôi bởi hệ thống quảng cáo được phân loại trước khi nhập.

1

Để thao tác DOM, tôi nghĩ rằng những gì bạn đang tìm kiếm là this. Tôi đã sử dụng để phân tích cú pháp tài liệu HTML từ web và nó hoạt động tốt cho tôi.

6

Tôi đã tìm thấy PHP HTML đơn giản DOM là thư viện hữu ích và thẳng tiến nhất. Tốt hơn PECL tôi sẽ nói.

Tôi đã viết một bài viết về how to use it to scrape myspace artist tour dates (chỉ là ví dụ). Dưới đây là một liên kết đến php simple html dom parser.

+0

+1 Sử dụng nó trước và hoạt động khá tốt cho đến nay – Marcel

+0

Liên kết đến bài viết đã chết. – matt

3

Thư viện DOM mà hiện nay được xây dựng-in có thể giải quyết vấn đề này một cách dễ dàng. Phương thức loadHTML sẽ chấp nhận XML không đúng định dạng trong khi phương thức tải sẽ không.

$d = new DOMDocument; 
$d->loadHTML('<div>This is some <b>text'); 
$d->saveHTML(); 

Kết quả sẽ là:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html> 
    <body> 
    <div>This is some <b>text</b></div> 
    </body> 
</html> 
+0

Tôi đã nhập một câu trả lời tương tự với nhiều hơn một chút về mã hóa chuỗi và cách trích xuất một đoạn tài liệu [ở đây] (http://stackoverflow.com/questions/8500390/fixing-unclosed-html-tags/43212965#43212965) –