次のような文字列があります。
Avery® Laser & Inkjet Self-Adhesive
それらをに変換する必要があります
Avery Laser & Inkjet Self-Adhesive.
つまり、特殊文字を削除し、html の特殊文字を通常の文字に変換します。
次のような文字列があります。
Avery® Laser & Inkjet Self-Adhesive
それらをに変換する必要があります
Avery Laser & Inkjet Self-Adhesive.
つまり、特殊文字を削除し、html の特殊文字を通常の文字に変換します。
Avery® レーザー & インクジェット自己粘着
最初にStringEscapeUtils#unescapeHtml4()
(または#unescapeXml()
、元の形式によっては ) を使用して、 を にエスケープ解除し&
ます&
。次にString#replaceAll()
withを使用して、印刷可能な ASCII 範囲[^\x20-\x7e]
内にない文字を取り除きます。
要約:
String clean = StringEscapeUtils.unescapeHtml4(dirty).replaceAll("[^\\x20-\\x7e]", "");
..生成する
Avery レーザー & インクジェット自己粘着
(あなたの例のように末尾のドットはありませんが、元のドットにはありませんでした;))
とはいえ、これは解決策へのリクエストというよりも回避策へのリクエストのように見えます。機能要件および/またはこの文字列の発生場所について詳しく説明していただければ、適切な解決策を提供できる可能性があります。つまり、間違ったエンコーディングを使用して文字列を読み取ることが原因のように見え、完全な HTML パーサーの代わりにテキストベースのパーサーを使用して文字列を読み取ることが原因のように見えます。®
&
Apache Commons TextプロジェクトのStringEscapeUtils
クラスを使用できます。
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;
}
多分あなたは次のようなものを使うことができます:
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;
}