清理HTML字符串 [英] Sanitize HTML string

查看:161
本文介绍了清理HTML字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个HTML刺这样的:

 &LT; p dir=\"ltr\"><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u>bold</u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u> </u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u>all</u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u> </u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u>in</u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u> </u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i><i><u><b><i><u><b><i><u><b><i><u><b><i><u>one</u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></p>

我要像消毒&LT在html; B&GT;&LT; I&GT;&LT; U&GT;大胆所有吲; / B&GT;&LT; I&GT /;&LT; / U&GT;

这个方法我试过: webText = webText.replaceAll(?(小于/(?: C |我| U)&GT;)\\\\ 1+,$ 1)的replaceAll (&LT; /(b | I | u)&GT;&LT; \\\\ 1 GT;,);

但它是没有用的。在HTML仍然笨拙。我应该怎么做修补一样吗?是否有任何其他的正则表达式或JSON的方式?


解决方案

  

但它是没有用的。在HTML仍然笨拙。我应该怎么做修补
  一样?是否有任何其他的正则表达式或JSON的方式?


正则表达式的可以的帮助在这里,但一般他们不服务很好的HTML解析器如果事情变得复杂。 Jsoup是的伟大的HTML标签库,我真的可以推荐它。

不幸的是你的HTML仍然有效的HTML,因此该解决方案是棘手的。

你最好开始使用 Jsoup文档,尤其是它的一个人的选择语法

这里的东西启动:

 最后弦乐的html = ... //你的HTML从上面//解析HTML字符串转换成文档
文档的DOC = Jsoup.parse(HTML,,Parser.xmlParser());/ *
 *选择的所有元素,这...
 *
 *(一)有一个文本(=至少不为空)
 *(b)的无儿童的它自己的
 *
 *遍历那些被发现并打印。
 * /
对于(element元素:doc.select(*:匹配(^ .. + $):不(:有(*))))
{
    的System.out.println(元);
}

结果:

 &LT; U&GT;大胆&LT; / U&GT;
&LT; U&GT;所有&LT; / U&GT;
&LT; U&GT;上述&lt; / U&GT;
&LT; U&GT;吲; / U&GT;

如果你需要从字面上&LT; B&GT;&LT; I&GT;&LT; U&GT;大胆所有吲; / B&GT;&LT; I&GT /;&LT; / U&GT;

 最后弦乐的html = ... //你的HTML从上面// 如上
文档的DOC = Jsoup.parse(HTML,,Parser.xmlParser());//文件的所有文字
字符串文本= doc.text();//创建一个元素,它的童车
element元素=新元素(Tag.valueOf(B),);
element.appendElement(I)appendElement(U)文本(文本)。;的System.out.println(元);

结果:

 &LT; B&GT;&LT; I&GT;&LT; U&GT;大胆所有吲; / U&GT;&LT; / I&GT;&LT; / B&GT;

I have an HTML sting like:

<p dir="ltr"><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u>bold</u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u> </u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u>all</u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u> </u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u>in</u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i><i><u><b><i><u><b><i><u><b><i><u><b><i><u><b><i><u> </u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></u></i><i><u><b><i><u><b><i><u><b><i><u><b><i><u>one</u></i></b></u></i></b></u></i></b></u></i></b></u></i></b></p>

I want to sanitize the html like <b><i><u> bold all in one </b></i></u>

I tried this method: webText = webText.replaceAll("(</?(?:b|i|u)>)\\1+", "$1").replaceAll("</(b|i|u)><\\1>", "");

But it is of no use. The html remains clumsy. What should I do to mend the same? Is there any other Regex or JSON way?

解决方案

But it is of no use. The html remains clumsy. What should I do to mend the same? Is there any other Regex or JSON way?

Regex may help here, but in general they serve not very well as Html parser if things get complex. Jsoup is a great Html library, and i really can recommend it.

Unfortunately your html is still valid html, so the solution is tricky.

Best you start with the Jsoup documentation, especially the one of it's Selector syntax.

Here's something for starting:

final String html = ... // your html from above

// Parse the html string into a document
Document doc = Jsoup.parse(html, "", Parser.xmlParser());

/*
 * Select all elements, which ...
 * 
 *   (a) have a text (= at least not empty)
 *   (b) has no childs it's own
 * 
 * Iterate over those found and print them.
 */
for( Element element : doc.select("*:matches(^..+?$):not(:has(*))") )
{
    System.out.println(element);
}

Result:

<u>bold</u>
<u>all</u>
<u>in</u>
<u>one</u>

If you need literally <b><i><u> bold all in one </b></i></u>:

final String html = ... // your html from above

// As above
Document doc = Jsoup.parse(html, "", Parser.xmlParser());

// All text of the document
String text = doc.text();

// Create an element and it's childs
Element element = new Element(Tag.valueOf("b"), "");
element.appendElement("i").appendElement("u").text(text);

System.out.println(element); 

Result:

<b><i><u>bold all in one</u></i></b>

这篇关于清理HTML字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆