A volte non si desidera semplicemente rimuovere i caratteri, ma basta rimuovere gli accenti. Sono venuto con la seguente classe di utilità che uso nei miei progetti web Java REST ogni volta che ho bisogno di includere una stringa in un URL:
import java.text.Normalizer;
import java.text.Normalizer.Form;
import org.apache.commons.lang.StringUtils;
/**
* Utility class for String manipulation.
*
* @author Stefan Haberl
*/
public abstract class TextUtils {
private static String[] searchList = { "Ä", "ä", "Ö", "ö", "Ü", "ü", "ß" };
private static String[] replaceList = { "Ae", "ae", "Oe", "oe", "Ue", "ue",
"sz" };
/**
* Normalizes a String by removing all accents to original 127 US-ASCII
* characters. This method handles German umlauts and "sharp-s" correctly
*
* @param s
* The String to normalize
* @return The normalized String
*/
public static String normalize(String s) {
if (s == null)
return null;
String n = null;
n = StringUtils.replaceEachRepeatedly(s, searchList, replaceList);
n = Normalizer.normalize(n, Form.NFD).replaceAll("[^\\p{ASCII}]", "");
return n;
}
/**
* Returns a clean representation of a String which might be used safely
* within an URL. Slugs are a more human friendly form of URL encoding a
* String.
* <p>
* The method first normalizes a String, then converts it to lowercase and
* removes ASCII characters, which might be problematic in URLs:
* <ul>
* <li>all whitespaces
* <li>dots ('.')
* <li>(semi-)colons (';' and ':')
* <li>equals ('=')
* <li>ampersands ('&')
* <li>slashes ('/')
* <li>angle brackets ('<' and '>')
* </ul>
*
* @param s
* The String to slugify
* @return The slugified String
* @see #normalize(String)
*/
public static String slugify(String s) {
if (s == null)
return null;
String n = normalize(s);
n = StringUtils.lowerCase(n);
n = n.replaceAll("[\\s.:;&=<>/]", "");
return n;
}
}
Essendo un altoparlante tedesco Ho incluso corretta gestione dei dieresi tedesche, nonché - l'elenco dovrebbe essere facile da estendere per altre lingue.
HTH
EDIT: Nota che può essere pericoloso per includere la stringa restituita in un URL. Dovresti almeno codificarlo in HTML per prevenire gli attacchi XSS.
fonte
2010-07-19 10:38:21
L'intero riferimento Unicode [http://www.regular-expressions.info/unicode.html](http://www.regular-expressions.info/unicode.html) – zaletniy