9

我有这样的字符串:

Avery® Laser & Inkjet Self-Adhesive

我需要将它们转换为

Avery Laser & Inkjet Self-Adhesive.

即删除特殊字符并将 html 特殊字符转换为常规字符。

4

4 回答 4

20
Avery® 激光与 喷墨不干胶

首先使用StringEscapeUtils#unescapeHtml4()(或#unescapeXml(),取决于原始格式)将转义&&. 然后使用String#replaceAll()with[^\x20-\x7e]去除不在可打印 ASCII 范围内的字符。

总结:

String clean = StringEscapeUtils.unescapeHtml4(dirty).replaceAll("[^\\x20-\\x7e]", "");

..产生

艾利激光和喷墨不干胶

(没有您的示例中的尾随点,但原始中不存在该点;))

也就是说,这看起来更像是对解决方法的请求,而不是对解决方案的请求。如果您详细说明功能要求和/或此字符串的来源,我们或许能够提供正确的解决方案。®看起来是由于使用错误的编码来读取字符串造成的,&看起来是由于使用基于文本的解析器而不是成熟的 HTML 解析器来读取字符串造成的。

于 2010-02-18T15:16:15.447 回答
6

您可以使用Apache Commons Text项目中的StringEscapeUtils类。

于 2010-02-18T09:27:40.207 回答
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;

}

于 2010-02-18T15:05:03.153 回答
1

如果您想模仿 php 函数 htmlspecialchars_decode 确实使用 php 函数 get_html_translation_table() 转储表,然后使用 java 代码,例如,

    static Hashtable html_specialchars_table = new Hashtable();
    static {
            html_specialchars_table.put("&lt;","<");
            html_specialchars_table.put("&gt;",">");
            html_specialchars_table.put("&amp;","&");
    }
    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;
    }
于 2012-04-18T06:43:01.563 回答