我有像:
这样的字符串Avery® Laser & Inkjet Self-Adhesive
我需要将它们转换为
Avery Laser & Inkjet Self-Adhesive.
即。删除特殊字符并将html特殊字符转换为常规字符。
答案 0 :(得分:19)
Avery® Laser & Inkjet Self-Adhesive
首先使用StringEscapeUtils#unescapeHtml4()
(或#unescapeXml()
,具体取决于原始格式),将&
转换为&
。然后使用String#replaceAll()
与[^\x20-\x7e]
一起删除不在printable ASCII range内的字符。
总结:
String clean = StringEscapeUtils.unescapeHtml4(dirty).replaceAll("[^\\x20-\\x7e]", "");
..产生
Avery Laser & Inkjet Self-Adhesive
(没有示例中的尾随点,但原始版本中没有;)
也就是说,这似乎是对解决方法的请求,而不是对解决方案的请求。如果您详细说明功能需求和/或此字符串的来源,我们可能能够提供正确的解决方案。 ®
看起来像是由于使用错误的编码来读取字符串而导致&
看起来像是使用基于文本的解析器来读取字符串而不是完整的HTML解析器
答案 1 :(得分:6)
您可以使用StringEscapeUtils
项目中的Apache Commons Text课程。
答案 2 :(得分:1)
也许你可以使用类似的东西:
yourTxt = yourTxt.replaceAll("&", "&");
在某些项目中我做了类似的事情:
public String replaceAcutesHTML(String str) {
str = str.replaceAll("á","á");
str = str.replaceAll("é","é");
str = str.replaceAll("í","í");
str = str.replaceAll("ó","ó");
str = str.replaceAll("ú","ú");
str = str.replaceAll("Á","Á");
str = str.replaceAll("É","É");
str = str.replaceAll("Í","Í");
str = str.replaceAll("Ó","Ó");
str = str.replaceAll("Ú","Ú");
str = str.replaceAll("ñ","ñ");
str = str.replaceAll("Ñ","Ñ");
return str;
}
答案 3 :(得分:1)
你想模仿php函数htmlspecialchars_decode使用php函数get_html_translation_table()转储表然后使用java代码,
static Hashtable html_specialchars_table = new Hashtable();
static {
html_specialchars_table.put("<","<");
html_specialchars_table.put(">",">");
html_specialchars_table.put("&","&");
}
static String htmlspecialchars_decode_ENT_NOQUOTES(String s){
Enumeration en = html_specialchars_table.keys();
while(en.hasMoreElements()){
String key = (String)en.nextElement();
String val = (String)html_specialchars_table.get(key);
s = s.replaceAll(key, val);
}
return s;
}