DOMDocument->saveHTML()
lấy tập dữ liệu XML DOM của bạn và viết nó ra dưới dạng HTML cũ, chứ không phải XML. Bạn không nên sử dụng saveHTML()
cùng với một loại tài liệu XHTML, vì đầu ra của nó sẽ không được định dạng đúng XML.
Nếu bạn sử dụng saveXML()
thay vào đó, bạn sẽ nhận được XHTML thích hợp. Bạn có thể phân phối đầu ra XML này cho các trình duyệt tuân thủ tiêu chuẩn nếu bạn cung cấp cho nó tiêu đề Content-Type: application/xhtml+xml
. Nhưng tiếc là IE6-8 sẽ không thể đọc được điều đó, vì chúng vẫn có thể xử lý HTML cũ, dưới loại phương tiện truyền thông text/html
.
Giải pháp thỏa hiệp thông thường là phân phối text/html
và sử dụng ‘XHTML tương thích HTML’ như được nêu trong Phụ lục C của thông số XHTML 1.0. Nhưng thật đáng buồn là không có phương thức PHP DOMDocument->saveXHTML()
nào để tạo ra kết quả chính xác cho việc này.
Có một số điều bạn có thể làm để thuyết phục saveXML()
để tạo đầu ra tương thích HTML cho một số trường hợp phổ biến. Điều quan trọng nhất là bạn phải đảm bảo rằng chỉ các phần tử được xác định bởi HTML4 là có một mô hình nội dung EMPTY
(<img>
, <br>
v.v.) thực sự có nội dung trống, khiến cú pháp tự đóng (<img/>
) được sử dụng. Các yếu tố khác không được sử dụng cú pháp tự đóng, vì vậy nếu chúng trống, bạn nên đặt một khoảng trống trong nội dung văn bản của chúng để ngăn chúng như vậy:
<script src="x.js"/> <-- no good, confuses HTML parser and breaks page
<script src="x.js"> </script> <-- fine
Cách khác để tìm hiểu là xử lý nội tuyến <script>
và <style>
yếu tố, là các phần tử bình thường trong XHTML nhưng đặc biệt là các phần tử nội dung CDATA
trong HTML. Cần có một số gói /*<![CDATA[*/.../*]]>*/
để thực hiện bất kỳ ký tự nào <
hoặc &
bên trong chúng hoạt động chủ yếu nhất quán, mặc dù lưu ý rằng bạn vẫn phải tránh các chuỗi ]]>
và </
.
Nếu bạn muốn thực sự làm đúng cách, bạn sẽ phải viết trình tuần tự XHTML tương thích HTML của riêng mình. Dài hạn có lẽ sẽ là một lựa chọn tốt hơn. Nhưng đối với các trường hợp đơn giản nhỏ, lấy cắp dữ liệu đầu vào của bạn để nó không chứa bất kỳ thứ gì có thể xuất hiện ở đầu kia của trình tuần tự XML không tương thích với HTML có lẽ là giải pháp nhanh.
Điều đó hoặc chỉ hút nó lên và sống với trường học cũ không phải là XML HTML, rõ ràng.
Bạn đã thử thêm một loại tài liệu để xem điều gì sẽ xảy ra? – ceejayoz
Tôi đã luôn sử dụng một loại tài liệu XHTML, nghĩ rằng nó không liên quan vì tôi mệt mỏi -_- – peterjwest