2009-02-12 36 views
5

Trong ứng dụng của Ruby của tôi, tôi đã sử dụng phương pháp sau và biểu hiện thường xuyên để loại bỏ tất cả các thẻ HTML từ một chuỗi:Vấn đề với Regular Expression để Hủy bỏ Tag HTML

str.gsub(/<\/?[^>]*>/,"") 

biểu thức chính quy này đã làm chỉ là về tất cả những gì đã mong đợi nó, ngoại trừ nó gây ra tất cả các dấu ngoặc kép được chuyển đổi thành &#8220; và tất cả các dấu nháy đơn sẽ được thay đổi thành &#8221; .

Điều hiển nhiên tôi thiếu là chuyển đổi mã lộn xộn trở lại thành ký tự thích hợp của họ là gì?

Chỉnh sửa: Sự cố xảy ra có hoặc không có Biểu thức chính quy, vì vậy rõ ràng vấn đề của tôi không liên quan gì đến nó. Câu hỏi của tôi bây giờ là làm thế nào để đối phó với lỗi định dạng này và sửa nó. Cảm ơn!

+0

Bạn đang sử dụng một số loại của "báo làm đẹp"? – Gumbo

Trả lời

-3

Bạn có thể sử dụng hệ thống nhiều đường để nhận kết quả bạn đang tìm kiếm.

Sau khi chạy cụm từ thông dụng, hãy chạy biểu thức để chuyển đổi & 8220; để báo giá và một số khác để chuyển đổi & 8221; để trích dẫn đơn.

2

Bạn sẽ chạy vào rắc rối hơn khi bạn nhìn thấy một cái gì đó như:

<doohickey name="<foobar>"> 

Bạn sẽ muốn áp dụng cái gì đó như:

gsub(/<[^<>]*>/, "") 

... cho miễn là mẫu phù hợp.

+0

Trừ khi bạn có nghĩa là OP nên được chuẩn bị để đối phó với HTML không hợp lệ/không hợp lệ, bạn đã sai. Biểu mẫu này sẽ không bao giờ xuất hiện ở dạng HTML chính xác. –

2

biểu thức chính quy này đã làm chỉ là về tất cả Tôi đã chờ đợi nó đến, ngoại trừ nó gây ra tất cả các dấu ngoặc kép để được chuyển thành “ và tất cả dấu nháy đơn được thay đổi để ” .

Điều này không có vẻ như RegExp sẽ làm việc này. Bạn có chắc nó khác trước đây không?

Xem câu hỏi này ở đây để biết thông tin về vấn đề này, nó đã có một câu trả lời tuyệt vời:
Get non UTF-8 form fields as UTF-8 in php.

+0

Bò thánh, bạn nói đúng. Tôi nhận thấy nó sau khi thêm Regex, nhưng hiệu ứng trên các nhân vật sẽ xảy ra theo một trong hai cách. Tôi chỉ không nhận ra vì nó ít rõ ràng hơn. Vì vậy, câu hỏi của tôi sẽ trở thành: Làm thế nào để sửa định dạng này? – btw

0

Tôi đã chạy vào một vấn đề tương tự với những thay đổi nhân vật, điều này đã xảy ra khi mã của tôi chạy qua mô-đun khác mà thực thi mã hóa UTF-8 và sau đó khi nó trở lại, tôi đã có một tập tin khác (slurped array of lines) trên tay.

5

Sử dụng CGI :: unescapeHTML sau khi bạn thực hiện thay thường xuyên của bạn:

CGI::unescapeHTML(str.gsub(/<\/?[^>]*>/,"")) 

Xem http://www.ruby-doc.org/core/classes/CGI.html#M000547

Trong đoạn mã trên, gsub loại bỏ tất cả các thẻ HTML. Sau đó, unescapeHTML() sẽ chuyển đổi tất cả các thực thể HTML (chẳng hạn như <, & # 8220) thành các ký tự thực tế của chúng (<, dấu ngoặc kép, v.v.)

đối với một bài đăng trên trang này Với, lưu ý rằng bạn sẽ không bao giờ bao giờ được thông qua HTML như

<tag attribute="<value>">2 + 3 < 6</tag> 

(đó là HTML không hợp lệ); những gì bạn có thể nhận được là, thay vì:

<tag attribute="&lt;value&gt;">2 + 3 &lt; 6</tag> 

Các cuộc gọi đến Gsub sẽ biến đổi ở trên để:

2 + 3 &lt; 6 

Và unescapeHTML sẽ hoàn thành công việc:

2 + 3 < 6 
Các vấn đề liên quan