5

JTidy (jtidy-r938.jar) を使用して入力 HTML 文字列をサニタイズしようとしていますが、デフォルト設定を正しく取得するのに問題があるようです。多くの場合、「hello world」などの文字列は、整理すると「helloworld」になります。私はここで何をしているのかを示したかったのですが、どんな指針も本当に感謝しています:

rawHtmlが入力 (実世界) HTML を含む文字列であると仮定します。これは私がやっていることです:

        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");   

まず、上記のコードで何か根本的に間違っているように見えますか? 私はこれで奇妙な結果を得ているようです。

たとえば、次の入力について考えてみます。

<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>

出力は次のとおりです。

<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>

そう、

「public String parseDescription」は「publicString parseDescription」になります

前もって感謝します!

4

3 に答える 3

3

JTidy がどのように構成されているかを見てみましょう。

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

おそらく、問題の原因が明らかになるでしょう。

何が変ですか?実際の出力と期待値の例はほとんどありません...多分?

于 2010-04-09T16:05:49.077 に答える
2

これは Jtidy のバグのようです。問題を引き起こす正確なファイルについては、次を参照してください。

http://sourceforge.net/tracker/?func=detail&aid=2985849&group_id=13153&aid=113153

助けてくれてありがとう!

于 2010-04-12T13:58:58.847 に答える
1

これが、AntからJTidyを呼び出す方法です。それからAPI呼び出しを推測することができます:

<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>
于 2010-03-31T06:36:26.467 に答える