2010-03-30 33 views
5

Tôi đang cố gắng sử dụng JTidy (jtidy-r938.jar) để khử trùng chuỗi HTML đầu vào, nhưng dường như tôi gặp sự cố khi nhận cài đặt mặc định đúng. Thường thì các chuỗi như "hello world" kết thúc là "helloworld" sau khi làm sạch. Tôi muốn thể hiện những gì tôi đang làm ở đây và bất kỳ con trỏ nào cũng sẽ được đánh giá cao:Sử dụng đúng cách JTidy để làm sạch HTML

Giả sử rằng rawHtml là Chuỗi chứa HTML đầu vào (thế giới thực). Đây là những gì tôi đang làm:

 Tidy tidy = new Tidy(); 
     tidy.setPrintBodyOnly(true); 

     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     PrintStream ps = new PrintStream(baos); 

     tidy.parse(new StringReader(rawHtml), ps); 
     return baos.toString("UTF8"); 

Trước hết, có điều gì về cơ bản nhìn sai với mã trên không? Tôi dường như nhận được kết quả kỳ lạ với điều này.

Ví dụ, hãy xem xét đầu vào sau:

<p class="MsoNormal" style="text-autospace:none;"><font color="black"><span style="color:black;">???</span></font><b><font color="#7f0055"><span style="color:#7f0055;font-weight:bold;">private</span></font></b><font color="black"><span style="color:black;"> String parseDescription</span></font><font>

Đầu ra là:

<p class="MsoNormal" style="text-autospace:none;"><font color= "black"><span style="color:black;">&nbsp;&nbsp;&nbsp;</span></font> <b><font color="#7F0055"><span style= "color:#7f0055;font-weight:bold;">private</span></font></b><font color="black"><span style="color:black;">String parseDescription</span></font></p>

Vì vậy,

"public String parseDescription" trở thành "publicString parseDescription"

Cảm ơn trước!

+0

Tôi cũng nhận thấy jTidy sẽ chuyển ' ' thành byte 'a0', thành dấu cách (' Node.getNodeValue() '), nhưng khi bạn cố chuyển đổi thành chuỗi UTF8, nó sẽ in ra'? ' bởi vì nó không phải là một ký tự UTF hợp lệ! Vâng, nó là [unicode] (http://www.unicode.org/charts/PDF/U0080.pdf), nhưng không phải là HTML và hiển thị dưới dạng '?'. – Chloe

Trả lời

1

Đây là cách chúng tôi gọi JTidy từ Ant. Bạn có thể suy ra các cuộc gọi API từ nó:

<tidy destdir="${build.dir.result}"> 
    <fileset dir="${src}" includes="**/*.htm"/> 
    <parameter name="tidy-mark" value="false"/> 
    <parameter name="output-xml" value="no"/> 
    <parameter name="numeric-entities" value="yes"/> 
    <parameter name="indent-spaces" value="2"/> 
    <parameter name="indent-attributes" value="no"/> 
    <parameter name="markup" value="yes"/> 
    <parameter name="wrap" value="2000"/> 
    <parameter name="uppercase-tags" value="no"/> 
    <parameter name="uppercase-attributes" value="no"/> 
    <parameter name="quiet" value="no"/> 
    <parameter name="clean" value="yes"/> 
    <parameter name="show-warnings" value="yes"/> 
    <parameter name="break-before-br" value="yes"/> 
    <parameter name="hide-comments" value="yes"/> 
    <parameter name="char-encoding" value="latin1"/> 
    <parameter name="output-html" value="yes"/> 
</tidy> 
3

Hãy nhìn vào cách JTidy được cấu hình:

StringWriter writer = new StringWriter(); 
tidy.getConfiguration().printConfigOptions(writer, true); 
System.out.println(writer.toString()); 

Có lẽ nó sau đó nhận được rõ ràng những gì gây ra vấn đề.

Điều gì lạ? Ví dụ nhỏ, sản lượng thực tế và dự kiến ​​... có thể?

+0

Có, cập nhật bài đăng với sự cố lạ – ragebiswas

+0

cũng đã giải quyết được sự cố của tôi, thx! – jambriz

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