Từ perlfaq9: How do I remove HTML from a string?
Cách chính xác nhất (mặc dù không phải là nhanh nhất) là sử dụng HTML :: Trình phân tích cú pháp từ CPAN. Một cách chủ yếu khác là sử dụng HTML :: FormatText không chỉ loại bỏ HTML mà còn cố gắng tạo một định dạng đơn giản của văn bản thuần túy.
Nhiều người cố gắng tiếp cận biểu thức chính quy đơn giản, như s/<. *?> // g, nhưng không thành công trong nhiều trường hợp vì các thẻ có thể tiếp tục bị ngắt dòng, chúng có thể chứa dấu ngoặc nhọn được trích dẫn, hoặc nhận xét HTML có thể có mặt. Ngoài ra, mọi người đều quên chuyển đổi các thực thể - chẳng hạn như < chẳng hạn.
Dưới đây là một "đầu óc đơn giản" cách tiếp cận, mà làm việc cho hầu hết các tập tin:
#!/usr/bin/perl -p0777
s/<(?:[^>'"]*|(['"]).*?\1)*>//gs
Nếu bạn muốn có một giải pháp hoàn chỉnh hơn, hãy xem các chương trình striphtml 3 giai đoạn trong http://www.cpan.org/authors/id/T/TO/TOMC/scripts/striphtml.gz.
Dưới đây là một số trường hợp khó khăn mà bạn nên suy nghĩ về khi chọn một giải pháp:
<IMG SRC = "foo.gif" ALT = "A > B">
<IMG SRC = "foo.gif"
ALT = "A > B">
<!-- <A comment> -->
<script>if (a<b && a>c)</script>
<# Just data #>
<![INCLUDE CDATA [ >>>>>>>>>>>> ]]>
Nếu HTML bình luận bao gồm các thẻ khác, những giải pháp cũng sẽ phá vỡ trên văn bản như thế này:
<!-- This section commented out.
<B>You can't see me!</B>
-->
Nguồn
2009-07-01 08:16:54
Tôi sẽ không nói có thể, tôi sẽ nói nên. Cố gắng để khử trùng HTML với các regex là vô lý trong ngày và tuổi tác. Sử dụng một trong nhiều mô-đun vệ sinh HTML từ CPAN, tốt hơn là một cái gì đó được thiết kế để ngăn chặn lỗ hổng XSS và không được viết bởi Daniel Muey. –
Hãy coi chừng HTML :: Dải không hỗ trợ đúng các chuỗi được mã hóa UTF-8.Xem tại đây để biết cách giải quyết https://gist.github.com/910818 – nick