最近研究爬虫, 做过滤器, 遇到微信文章带emoji表情的居然没有过滤.
抓到串了存到数据库里面里面居然能够直接显示....数据库是mongodb
真是哔了狗了.
写一个小的过滤器:
/**
* 过滤emoji工具类
*
* @author createOrUpdate by xx update time: 2015-11-26 上午9:24:27
*/
public class EmojiFilter {
/* 要过滤的特殊字符-emoji */
private static Pattern emoji = Pattern.compile ("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE ) ;
/**
* 是否包含emoji特殊字符
* @param source
* @param emoji
* @return
*/
private static boolean containsEmoji(String source,Pattern emoji){
CharSequence cs = null;
cs = source;
Matcher emojiMatcher = emoji.matcher(cs);
if (emojiMatcher.find()) {
emojiMatcher.replaceAll("");
return true;
}
return false;
}
/**
* 将字符串中得特殊字符转为空
* @param source 原字符串, 不需要特殊处理
* @return
*/
public static String replaceEmoji(String source){
if(containsEmoji(source, emoji)){
CharSequence cs = null;
cs = source;
Matcher emojiMatcher = emoji.matcher(cs);
if (emojiMatcher.find()) {
source = emojiMatcher.replaceAll("");
}
}
return source;
}
}
过滤的时候就直接调用replaceEmoji方法了.
比如从网址抓了条数据下来:
Document doc = Jsoup.parse(new URL("你的网址"), 5000);
String html = doc.html();
html = EmojiFilter.replaceEmoji(html);
doc = Jsoup.parse(html);
这样就过滤掉了.
例子:
\u2705
这个unicode其实是:
没错, myeclipse可以直接显示这个.
另外:如果大家有什么好的过滤方法也都希望给我回复一下,我学习学习.....