2009-04-17 39 views
9

Trước khi chúng tôi bắt đầu, strip_tags() không hoạt động.php regex để xóa HTML

bây giờ,

Tôi đã có một số dữ liệu mà cần phải được phân tích, vấn đề là, tôi cần để thoát khỏi tất cả các HTML đã được formated rất kỳ lạ. các thẻ giống như thế này: (chú ý không gian)

<p> blah blah blah </p > < a href= " link.html " > blah blah blah </a> 

Tất cả các regexs Tôi đã cố gắng không làm việc, và tôi không biết đủ về Formating regex để làm cho họ làm việc. Tôi không quan tâm đến việc bảo quản bất cứ thứ gì bên trong các thẻ và muốn loại bỏ văn bản bên trong một liên kết nếu tôi có thể.

Bất kỳ ai có ý tưởng nào?

(Tôi thực sự cần phải chỉ cần ngồi xuống và học biểu thức thông thường một ngày)

Trả lời

26

Liệu

preg_replace('/<[^>]*>/', '', $content) 

làm việc?

+1

Thay vì '*' bạn có thể sử dụng '+', vì với '*' bạn cũng sẽ thay thế '<>' nếu tìm thấy trong văn bản. – machineaddict

2

Giải pháp mà không được fool-proof, nhưng sẽ làm việc cho những gì bạn được đăng:

s/<[^>]*>//g 
1

định dạng bình thường? Đó là HTML hợp lệ mặc dù phải không? Trong trường hợp đó tôi sẽ không chạm vào nó với các biểu thức thông thường. Ví dụ về cách điều này có thể đi sai và tại sao đó là một ý tưởng tồi là quân đoàn. Thay vào đó, tôi muốn sử dụng HTML Tidy trên đó để làm sạch không gian trắng không cần thiết.

+0

Tôi sẽ đăng bài này, nhưng đã quá mệt mỏi để từ nó một cách thông minh. +1. – strager

+0

Khi tôi chạy chuỗi thông qua HTML Tidy, nó thay đổi các dấu hiệu < and > thành < and > để strip_tags() vẫn không hoạt động trên các chuỗi đó. Tôi đã sử dụng cả tidy_parse_string() và tidy_repair_string(). Có một chức năng khác sẽ hoạt động mà tôi không thấy? – Me1000

-2

http://ca3.php.net/strip_tags có lẽ là những gì bạn cần.

+0

strip_tags() không hoạt động (như được lưu ý bởi dòng đầu tiên trong câu hỏi của tôi) vì PHP không nhận ra các thẻ là HTML do việc định dạng. Đó là suy nghĩ đầu tiên của tôi là tốt. – Me1000

-2

Hãy thử điều này và cho tôi biết.

<?php 
$text = '<p> blah blah blah </p > < a href= " link.html " > blah blah blah</a>'; 
echo strip_tags($text); 
echo "\n"; 
echo strip_tags($text, '<p><a>'); 
?> 
+0

strip_tags() không hoạt động (như được ghi chú bởi dòng đầu tiên trong câu hỏi của tôi) vì PHP không nhận ra các thẻ là HTML. Đó là suy nghĩ đầu tiên của tôi là tốt. – Me1000

+0

Bạn đã thêm điều đó sau? Tôi hoàn toàn bỏ lỡ điều đó ... Bạn đã thử sử dụng preg_replace chưa? –

+0

không, bài đăng chưa được chỉnh sửa. Tôi đã hỏi về regex tôi có thể sử dụng. câu trả lời hỗn loạn là rất có thể là một trong những tôi sẽ kết thúc bằng cách sử dụng, nhưng nếu tôi có thể sử dụng html gọn gàng để làm sạch mã sau đó sử dụng strip_tags đó sẽ tốt, nhưng tôi không thể tìm thấy một chức năng trong html gọn gàng mà không những gì tôi cần ; do đó tại sao tôi đã không kiểm tra câu trả lời hỗn loạn. :) – Me1000

12

strip_tags() sẽ có tác dụng nếu bạn sử dụng html_entity_decode() trên một biến trước strip_tags()

<?php 
$text = '<p> blah blah blah </p > < a href= " link.html " > blah blah blah</a>'; 
echo strip_tags(html_entity_decode($text)); 
?> 
+0

đây phải là câu trả lời được chấp nhận .. – dendini

+0

Tại sao 'html_entity_decode' là cần thiết? – alex