2009-08-20 37 views
8

Tôi hiện đang sử dụng các ràng buộc RubyTidy Ruby cho HTML gọn gàng để đảm bảo HTML tôi nhận được được định dạng tốt. Hiện tại thư viện này là điều duy nhất giữ tôi trở lại từ việc có được một ứng dụng Rails trên Ruby 1.9. Có bất kỳ thư viện thay thế nào ở đó sẽ dọn dẹp các đoạn mã HTML trên Ruby 1.9 không?HTML gọn gàng/dọn dẹp trong Ruby 1.9

Trả lời

1

Hiện nay thư viện này là điều duy nhất giữ tôi lại nhận được từ một ứng dụng Rails trên Ruby 1.9.

Xem ra, các ràng buộc Ruby Tidy có một số rò rỉ bộ nhớ khó chịu. Nó hiện không sử dụng được trong các quy trình chạy dài. (đối với hồ sơ, tôi đang sử dụng http://github.com/ak47/tidy)

Tôi vừa phải xóa nó khỏi ứng dụng Rails 2.3 sản xuất vì nó bị rò rỉ khoảng 1MB/phút.

3

Dưới đây là một ví dụ tốt đẹp của cách làm html của bạn trông đẹp hơn sử dụng gọn gàng:

require 'tidy' 
Tidy.path = '/opt/local/lib/libtidy.dylib' # or where ever your tidylib resides 

nice_html = "" 
Tidy.open(:show_warnings=>true) do |tidy| 
    tidy.options.output_xhtml = true 
    tidy.options.wrap = 0 
    tidy.options.indent = 'auto' 
    tidy.options.indent_attributes = false 
    tidy.options.indent_spaces = 4 
    tidy.options.vertical_space = false 
    tidy.options.char_encoding = 'utf8' 
    nice_html = tidy.clean(my_nasty_html_string) 
end 

# remove excess newlines 
nice_html = nice_html.strip.gsub(/\n+/, "\n") 
puts nice_html 

Đối với tùy chọn gọn gàng hơn, hãy kiểm tra man page.

+0

Tính đến bây giờ nó xuất hiện viên ngọc gọn gàng là không tương thích với Ruby 1.9. Có vẻ như là một ngã ba tại https://github.com/ShogunPanda/tidy nhưng tôi chưa điều tra nó. – aceofspades

7

http://github.com/libc/tidy_ffi/blob/master/README.rdoc làm việc với ruby ​​1.9 (phiên bản mới nhất)

Nếu bạn đang làm việc trên cửa sổ, bạn cần phải thiết lập các library_path ví dụ

require 'tidy_ffi' 
    TidyFFI.library_path = 'lib\\tidy\\bin\\tidy.dll' 
    tidy = TidyFFI::Tidy.new('test') 
    puts tidy.clean 

(Nó sử dụng dll giống như gọn gàng) Các liên kết ở trên cung cấp cho bạn nhiều ví dụ hơn về cách sử dụng.

7

Tôi đang sử dụng để sửa chữa Nokogiri html hợp lệ:

 
    Nokogiri::HTML::DocumentFragment.parse(html).to_html 
+1

Tôi không nghĩ rằng điều này giúp ngăn chặn HTML. – aceofspades

+0

Có đáng tin cậy không? Ý tôi là, nó sửa lỗi cú pháp như, ví dụ, danh sách lồng nhau trong đoạn văn? –

+0

Nokogiri chỉ đảm bảo html được định dạng đúng, nhưng nó sẽ không sửa lỗi cú pháp. Ví dụ: '

x
y' là "cố định" thành '
x
y
' – Daniel

Các vấn đề liên quan