今天在解決系統安全漏洞及代碼安全漏洞。需要設定一個允許輸入的字元白名單。
因為使用者可以輸入 中文、大寫英文、小寫英文、數字、以及正常字元。
有些資料内查詢的中文在 unicode編碼 範圍為:\u4E00-\u9FA5 這個範圍為基本漢字。(文末附更多中文字元集)
\u4E00 這個怎麼看,以前沒有具體看過,今天分析了一下豁然開朗,原來這麼簡單。
unicode百度百科
\u4E00 分為兩部分 \u 和 4E00
\u 為 unicode編碼的意思
4E00 是十六進制數
可以将十六進制通過工具轉換成10進制 線上進制轉換工具
4E00轉換為十進制為:19968
9FA5轉換為十進制為:40869
換句話說基本中文轉成十進制範圍19968-40869
可以自己寫個main方法測試一下、
一:将unicode編碼 \u4E00 通過工具轉成中文得到的是“一”。 Unicode線上轉換工具
二:寫個main方法将十進制19968轉換成char輸出。輸出的也是 “一”
三:通過以上方法即可将中文在unicode編碼的範圍,轉成在數值中的範圍,這樣就得到了中文轉成數值後的範圍了。
public static void main(String[] args) {
System.out.println("數值的19968對應的char="+(char)19968);
}
是以根據以上内容自己寫了一個白名單過濾字元串工具類。
package cdb.hq.litsoft.bjyl.connector.util;
public class StringWhiteList {
public static String cleanString(String aStr){
if(aStr==null) return null;
String cleanString="";
for(int i=0;i<aStr.length();i++){
cleanString+=cleanChar(aStr.charAt(i));
}
return cleanString;
}
public static char cleanChar(char aChar) {
// 0-9
for(int i=48;i<=57;i++){
if(aChar==i){return (char)i;}
}
// 'A'-'Z'
for(int i=65;i<=90;i++){
if(aChar==i){return (char)i;}
}
// 'a'-'z'
for(int i=97;i<=122;i++){
if(aChar==i){return (char)i;}
}
// 中文
for(int i=19968;i<=40879;i++){
if(aChar==i){System.out.println((char)i+"對應的int值="+i);return (char)i;}
}
//特殊字元
switch (aChar) {
case '/':return '/';
case '.':return '.';
case '-':return '-';
case '_':return '_';
case ' ':return ' ';
}
return '%';
}
public static void main(String[] args) {
System.out.println(StringWhiteList.cleanString("0Aa中文/.-_ "));
System.out.println(StringWhiteList.cleanString("0Aa中文/.-_ !??"));
System.out.println("符号!對應的int="+(int)'!');
System.out.println("符号?對應的int="+(int)'?');
System.out.println("int的19968對應的char="+(char)19968);
System.out.println("int的40879對應的char="+(char)40879);
}
}
中文在unicode編碼中的範圍如下:
字元集 | 字數 | Unicode 編碼 |
基本漢字 | 20902字 | 4E00-9FA5 |
基本漢字補充 | 74字 | 9FA6-9FEF |
擴充A | 6582字 | 3400-4DB5 |
擴充B | 42711字 | 20000-2A6D6 |
擴充C | 4149字 | 2A700-2B734 |
擴充D | 222字 | 2B740-2B81D |
擴充E | 5762字 | 2B820-2CEA1 |
擴充F | 7473字 | 2CEB0-2EBE0 |
擴充G | 4939字 | 30000-3134A |
康熙部首 | 214字 | 2F00-2FD5 |
部首擴充 | 115字 | 2E80-2EF3 |
相容漢字 | 477字 | F900-FAD9 |
相容擴充 | 542字 | 2F800-2FA1D |
PUA(GBK)部件 | 81字 | E815-E86F |
部件擴充 | 452字 | E400-E5E8 |
PUA增補 | 207字 | E600-E6CF |
漢字筆畫 | 36字 | 31C0-31E3 |
漢字結構 | 12字 | 2FF0-2FFB |
漢語注音 | 43字 | 3105-312F |
注音擴充 | 22字 | 31A0-31BA |
〇 | 1字 | 3007 |