Tôi đang sử dụng DOMDocument của PHP để phân tích và bình thường hóa HTML người dùng gửi bằng cách sử dụng phương pháp loadHTML
để phân tích các nội dung sau đó nhận được một kết quả tốt được hình thành qua saveHTML
:PHP DOMDocument - nhận nguồn html của BODY
$dom= new DOMDocument();
$dom->loadHTML('<div><p>Hello World');
$well_formed= $dom->saveHTML();
echo($well_formed);
Điều này thực hiện một công việc tuyệt vời để phân tích cú pháp phân đoạn và thêm các thẻ đóng thích hợp. Vấn đề là tôi cũng nhận được một loạt các thẻ tôi không muốn như <!DOCTYPE>
, <html>
, <head>
và <body>
. Tôi hiểu rằng mọi tài liệu HTML được định dạng tốt đều cần các thẻ này, nhưng đoạn HTML mà tôi đang chuẩn hóa sẽ được chèn vào một tài liệu hợp lệ hiện có.
Có thông tin tốt ở đây, nhưng tôi muốn lập luận rằng DOMDocument vẫn là một legit công cụ này. Sự tồn tại của một phương thức "loadHTML" ngụ ý rằng DOMDocument có nghĩa là để phân tích các tài liệu HTML cũng như các tài liệu XML. HTMLPurifier hoặc các trình phân tích cú pháp HTML "true" khác được viết bằng PHP rất tuyệt vời, nhưng sự hoàn hảo của chúng. luôn nhạt nhòa khi so sánh với PHP Objects. –
@Alan: Tôi đồng ý rằng DOMDocument là tuyệt vời khi nói đến phân tích cú pháp tài liệu HTML ;;; nhưng đối với các phần HTML, đặc biệt là ** do người dùng gửi **, tôi tin HTMLPurifier là một công cụ tốt hơn: nó được tạo chính xác với mục đích lọc HTML do người dùng gửi - bao gồm từ điểm bảo mật * (Ví dụ: DOMDocument không quan tâm đến XSS, trong khi HTMLPurifier không ;;; DOMDocument không cho phép bạn chỉ định thẻ/thuộc tính nào được cho phép, trong khi HTMLPUrifier thực hiện) * –