首頁 >web前端 >html教學 >談談html轉義字元如何透過程式碼辨識_HTML/Xhtml_網頁製作

談談html轉義字元如何透過程式碼辨識_HTML/Xhtml_網頁製作

WBOY
WBOY原創
2016-05-16 16:39:171979瀏覽

偶爾會在數據中看到諸如' 這樣的字符,特徵如下

以開頭,中間是一串數字,以;結尾
以&開頭,中間一串字符,以;結尾

例如最常見的 或等價的 

瀏覽器遇到這些轉義符,會轉義回來,但如何透過程式碼辨識? org.apache.commons.lang.StringEscapeUtils.unescapeHtml提供了很好的說明

遇到上面的第一種情況,中間是數字的,直接將數字(unicode)轉為char
遇到第二情況,中間是字符,只能查映射表了,從映射表中找到字符對應的數字再轉換為char 看看代碼就一目了然了

看看HTML40如何定義的

複製程式碼
程式碼如下:

static {
HTML40 = new Entities();
fillWithHtml40Entities(HTML40);
}
static void fillWithHtml40Entities(Entities entities) {
entities.addEntities(BASIC_ARRAY); }


再看看BASIC_ARRAY、ISO8859_1_ARRAY、HTML40_ARRAY 分別是什麼

BASIC_ARRAY 🎜>複製程式碼


程式碼如下:
private static final String[][] BASIC_ARRAY = {{"quot", "34"}, // " - double-quote {"amp", "38"}, // & - ampersand {"lt", "60"}, // {"gt", " 62"}, // > - greater-than };
ISO8859_1_ARRAY








程式碼如下:

static final String[][] ISO8859_1_ARRAY = {{"nbsp", "160"}, // 不間斷空格
{"iexcl", "161"}, // 倒置感嘆號
{"iexcl", "161"}, // 倒置感嘆號
{"cent", "162"}, // 分號
{"pound", "163"}, // 英鎊符號
{"curren", "164"}, // 貨幣sign
{"yen", "165"}, // 日元符號= 人民幣符號
{"brvbar", "166"}, // 斷條= 斷豎條
{"sect", " 167"}, // 節號
{"uml", "168"}, // 分音符= 間距分音符
{"copy", "169"}, // � - 版權所有符號
{"ordf", "170"}, // 陰性序數指示符
{"laquo", "171"}, // 左向雙角引號= 左向guillemet
{"not", " 172"}, // 不是符號
{"shy", "173"}, // 軟連字號= 任意連字號
{"reg", "174"}, // � - 註冊商標符號
{"macr", "175"}, // 宏= 間距宏= 上劃線= APL 上劃線
{"deg", "176"}, // 度數符號
{" plusmn", "177" }, // 加減號= 加減號
{"sup2", "178"}, // 上標二= 上標數字二= 平方
{"sup3", "179"} , // 上標三= 上標數字三= 立方
{"acute", "180"}, // 急性重音符號= 空格急性
{"micro", "181"} , // 微符號
{"para", "182"}, // pilcrow 符號= 段落符號
{"middot", "183"}, // 中間點= 格魯吉亞語逗號= 希臘文中間點
{"cedil", "184"}, // 變音符號= 空格變音符號
{"sup1", "185"}, // 上標一= 上標數字一
{"ordm", "186"}, // 陽性序數指示符
{"raquo", "187"}, // 右向雙角引號= 右向guillemet
{"frac14", "188 "}, // 俗分數四分之一= 分數四分之一
{"frac12", "189"}, // 粗俗分數二分之一= 分數二分之一
{"frac34", "190"}, // 粗俗分數四分之三= 分數四分之三
{" iquest", "191"}, // 倒問號= 翻轉問號
{"Agrave", "192"}, // � - 大寫A,重音符號
{"Aacute", "193" }, // � - 大寫A,銳音符
{"Acirc", " 194"}, // � - 大寫A,揚抑音符
{"Atilde", "195"}, // � -大寫A,波形符號
{"Auml", "196"}, / / � - 大寫A,母音變音
{"Aring", "197"}, // � - 大寫A,環
{ "AElig", "198"}, // � - 大寫AE
{"Ccedil", "199"}, // � - 大寫C, 變音符號
{"Egrave", "200"}, / / � - 大寫E,重音
{"Eacute ", "201"}, // � - 大寫E,重音
{"Ecirc", "202"}, // � - 大寫E,揚抑符
{"Euml", "203"} , // � - 大寫E,母音變音
{"Igrave", "204"}, // � - 大寫I,重音
{" Iacute", "205"}, // � - 大寫I,尖音符
{"Icirc", "206"}, // � - 大寫I,抑揚音符
{"Iuml", "207" }, // � - 大寫I,元音變音
{"ETH", "208"}, // � - 大寫Eth,冰島語
{"Ntilde", "209"}, // � - 大寫N , 波形符號
{ "Ograve", "210"}, // � - 大寫O,重音符
{"Oacute", "211"}, // � - 大寫O,重音
{ "Ocirc", "212 "}, // � - 大寫O,揚抑符
{"Otilde", "213"}, // � - 大寫O,波浪線
{"Ouml", "214" }, // � - 大寫O,母音變音
{"times", "215"}, // 乘號
{"Oslash", "216"}, // � - 大寫O,斜線
{"Ugrave", "217"}, // � - 大寫U,重音
{"Uacute", "218"}, // � - 大寫U,重音
{"Ucirc", "219 "}, // � - 大寫U,揚抑符
{"Uuml", "220"}, // � - 大寫U,母音變音
{"Yacute", "221"}, // � - 大寫Y,尖音
{"THORN", "222"}, // � - 大寫THORN,冰島語
{"szlig", "223"}, // � - 小寫升號,德文
{"agrave", "224"}, // � - 小寫a,重音
{"aacute", "225"}, // � - 小寫a,重音
{" acirc" , "226"}, // � - 小寫a,揚抑符
{"atilde", "227"}, // � - 小寫a,波浪號
{"auml", "228 "}, / / � - 小寫a,母音變音
{"aring", "229"}, // � - 小寫a,環
{"aelig", "230"}, // � - 小寫ae
{"ccedil", "231"}, // � - 小寫c,變音符號
{"egrave", "232"}, // � - 小寫e,重音
{"eacute", "233 "}, // � - 小寫e,尖音符
{"ecirc", "234"}, // � - 小寫e,揚起音符
{"euml" , "235"}, // � - 小寫e,母音變音
{"igrave", "236"}, // � - 小寫i,重音符號
{"iacute", "237" }, // � - 小寫i,重音符號
{"icirc", "238"}, // � - 小寫i,揚抑符
{"iuml", "239"}, // � - 小寫i,變音符{"eth", "240"}, // � - 小寫eth,冰島文
{"ntilde", "241"}, // � - 小寫n,波浪號
{"ograve", " 242" }, // � - 小寫o,重音
{"oacute", "243"}, // � - 小寫o,重音
{"ocirc", "244"}, // � -小寫o,揚抑符
{"otilde", "245"}, // � - 小寫o,波浪號
{"ouml", "246"}, // � - 小寫o,母音變音
{"divide", "247"}, // 除號
{"oslash", "248"}, // � - 小寫o,斜線
{"ugrave" , "249"}, // � - 小寫u,重音符
{"uacute", "250"}, // � - 小寫u,銳音符
{"ucirc", "251"}, // � - 小寫u,揚抑符重音
{"uuml", "252"}, // � - 小寫u,母音變音
{"yacute", "253"}, // � - 小寫y,銳音符
{"thorn ", "254"}, // � - 小寫thorn,冰島語
{"yuml", "255"}, // � - 小寫y,元音變音
};

HTML40_ARRAY

複製程式碼
複製程式碼

static final String[][] HTML40_ARRAY = {
// ;
{"fnof", "402"}, // 帶鉤子的拉丁小寫f = function= florin, U 0192 ISOtech -->
//
{"Alpha", "913"}, // 希臘大寫字母alpha, U 0391 -->
{"Beta", "914"}, // 希臘大寫字母beta, U 0392 -->
{"Gamma", "915"}, // 希臘大寫字母gamma, U 0393 ISOgrk3 -->
{"Delta", "916"}, // 希臘大寫字母delta,U 0394 ISOgrk3 -->
{"Epsilon", "917"}, // 希臘大寫字母epsilon, U 0395 -->
{"Zeta", "918"}, // 希臘大寫字母zeta, U 0396 -->
{"Eta", "919"}, // 希臘大寫字母eta, U 0397 -->
{"Theta", "920"}, // 希臘大寫字母theta,U 0398 ISOgrk3 -->
{"Iota", "921"}, // 希臘大寫字母iota, U 0399 -->
{"Kappa", "922"}, // 希臘大寫字母kappa, U 039A -->
{"Lambda", "923"}, // 希臘大寫字母lambda,U 039B ISOgrk3 -->
{"Mu", "924"}, // 希臘大寫字母mu, U 039C -->
{"Nu", "925"}, // 希臘大寫字母nu, U 039D -->
{"Xi", "926"}, // 希臘大寫字母xi, U 039E ISOgrk3 -->
{"Omicron", "927"}, //希臘大寫字母omicron, U 039F -->
{"Pi", "928"}, // 希臘大寫字母pi, U 03A0 ISOgrk3 -->
{"Rho", "929"}, / / 希臘大寫字母rho, U 03A1 -->
//
{"Sigma", "931"}, // 希臘大寫字母sigma ,U 03A3 ISOgrk3 -->
{"Tau", "932"}, // 希臘大寫字母tau, U 03A4 -->
{"Upsilon", "933"}, // 希臘大寫字母upsilon,U 03A5 ISOgrk3 -->
{"Phi", "934"}, // 希臘大寫字母phi,U 03A6 ISOgrk3 -->
{"Chi", "935"}, // 希臘大寫字母chi, U 03A7 -->
{"Psi", "936"}, // 希臘大寫字母psi,U 03A8 ISOgrk3 -->
{"Omega", "937"}, //希臘大寫字母omega,U 03A9 ISOgrk3 -->
{"alpha", "945"}, // 希臘小寫字母alpha,U 03B1 ISOgrk3 -->
{"beta", "946"}, // 希臘小寫字母beta, U 03B2 ISOgrk3 -->
{"gamma", "947"}, // 希臘小寫字母gamma,U 03B3 ISOgrk3 -->
{"delta", "948" }, // 希臘小寫字母delta,U 03B4 ISOgrk3 -->
{"epsilon", "949"}, // 希臘小寫字母epsilon,U 03B5 ISOgrk3 -->
{"zeta", " 950"}, // 希臘小寫字母zeta, U 03B6 ISOgrk3 -->
{"eta", "951"}, // 希臘小寫字母eta, U 03B7 ISOgrk3 -->
{"theta" , "952"}, // 希臘小寫字母theta,U 03B8 ISOgrk3 -->
{"iota", "953"}, // 希臘小寫字母iota, U 03B9 ISOgrk3 -->
{" kappa", "954"}, // 希臘小寫字母kappa,U 03BA ISOgrk3 -->
{"lambda", "955"}, // 希臘小寫字母lambda,U 03BB ISOgrk3 -->
{"mu", "956"}, // 希臘小寫字母mu, U 03BC ISOgrk3 -->
{"nu", "957"}, // 希臘小寫字母nu, U 03BD ISOgrk3 -->
{"xi", "958"}, // 希臘小寫字母xi, U 03BE ISOgrk3 -->
{"omicron", "959"}, // 希臘小寫字母omicron, U 03BF NEW -- >
{"pi", "960"}, // 希臘小寫字母pi, U 03C0 ISOgrk3 -->
{"rho", "961"}, // 希臘小寫字母rho, U 03C1 ISOgrk3 -->
{"sigmaf", "962"}, // 希臘小寫字母結尾的sigma,U 03C2 ISOgrk3 -->
{"sigma", "963"}, // 希臘小寫字母sigma ,U 03C3 ISOgrk3 -->
{"tau", "964"}, // 希臘小寫字母tau, U 03C4 ISOgrk3 -->
{"upsilon", "965"}, // 希臘小寫字母upsilon,U 03C5 ISOgrk3 -->
{"phi", "966"}, // 希臘小寫字母phi, U 03C6 ISOgrk3 -->
{"chi", "967"}, //希臘小寫字母chi, U 03C7 ISOgrk3 -->
{"psi", "968"}, // 希臘小寫字母psi, U 03C8 ISOgrk3 -->
{"omega", "969"}, // 希臘小寫字母omega,U 03C9 ISOgrk3 -->
{"thetasym", "977"}, // 希臘小寫字母theta 符號,U 03D1 NEW -->
{"upsih", "978 "}, // 帶鉤符號的希臘upsilon,U 03D2 NEW -->
{"piv", "982"}, // 希臘pi 符號,U 03D6 ISOgrk3 -->
//
{"bull", "8226"}, // 子彈=黑色小圓圈,U 2022 ISOpub -->
//
{"hellip", "8230"}, // 水平省略號= 三點引線,U 2026 ISOpub -->
{"prime", "8242"}, / / prime = 分鐘= 呎, U 2032 ISOtech -->
{"Prime", "8243"}, // 雙質數= 秒= 吋,U 2033 ISOtech -->
{"oline", " 8254"}, // 上劃線= 間距上劃線,U 203E NEW -->
{"frasl", "8260"}, // 分數斜線, U 2044 NEW -->
/ /
{"weierp", "8472"}, // 腳本大寫P = power set= Weierstrass p, U 2118 ISOamso -->
{"image", "8465"}, // 黑體大寫字母I = 虛部,U 2111 ISOamso -->
{"real", "8476"}, // 黑體大寫R = 實部符號,U 211C ISOamso -->
{"trade", "8482"}, / / 商標符號,U 2122 ISOnum -->
{"alefsym", "8501"}, // alef 符號= 第一個超限基數,U 2135 NEW -->
//
//
{ "larr", "8592"}, // 向左箭頭,U 2190 ISOnum -->
{"uarr", "8593"}, // 向上箭頭,U 2191 ISOnum-->
{" rarr", "8594"}, // 向右箭頭,U 2192 ISOnum -->
{"darr", "8595"}, // 向下箭頭,U 2193 ISOnum -->
{" harr", "8596"}, // 左右箭頭,U 2194 ISOamsa -->
{"crarr", "8629"}, // 角向左的向下箭頭=回車, U 21B5 NEW -- >
{"lArr", "8656"}, // 向左雙箭頭,U 21D0 ISOtech -->
//
{"uArr", "8657"}, // 向上雙箭頭,U 21D1 ISOamsa -->
{"rArr", "8658 "}, // 向右雙箭頭,U 21D2 ISOtech -->
//
{"dArr", "8659"}, // 向下雙箭頭,U 21D3 ISOamsa -->
{"hArr", "8660"}, // 左右雙箭頭,U 21D4 ISOamsa -->
//
{"forall", "8704" }, // 對所有,U 2200 ISOtech -->
{"part", "8706"}, // 偏微分,U 2202 ISOtech -->
{"exist", "8707"}, // 存在,U 2203 ISOtech -->
{"empty", "8709"}, // 空集合= null set = 直徑,U 2205 ISOamso -->
{"nabla", "8711" }, // nabla = 向後差分,U 2207 ISOtech -->
{"isin", "8712"}, // U 2208 ISOtech 的元素-->
{"notin", "8713" }, // 不是U 2209 ISOtech 的元素-->
{"ni", "8715"}, // 包含成員U 220B ISOtech -->
//
{"prod", "8719"}, // n 進位產品= 產品符號,U 220F ISOamsb -->
// ;
{"sum", "8721"}, // n 進制求和,U 2211 ISOamsb -->
// ;
{"minus", "8722"}, //減號,U 2212 ISOtech -->
{"lowast", "8727"}, // 星號運算符,U 2217 ISOtech -->
{"radic", "8730"}, //平方根= 根式符號,U 221A ISOtech -->
{"prop", "8733"}, // 與U 221D ISOtech 成比例-->
{"infin", "8734"}, //無窮大,U 221E ISOtech -->
{"ang", "8736"}, // 角度,U 2220 ISOamso -->
{"and", "8743"}, // 邏輯與= 楔形,U 2227 ISOtech -->
{"or", "8744"}, // 邏輯或= vee, U 2228 ISOtech -->
{"cap", "8745"}, // 交集= cap, U 2229 ISOtech -->
{"cup", "8746"}, // union = cup, U 222A ISOtech -->
{"int", "8747"}, // 積分, U 222B ISOtech -->
{"there4", "8756"}, // 因此,U 2234 ISOtech -->
{"sim", "8764"}, // 波形符運算子= 隨= 變化,類似,U 223C ISOtech -->
// ;
{"cong", "8773"}, // 約等於,U 2245 ISOtech -->
{"asymp", "8776"}, // 幾乎等於= 漸近於,U 2248 ISOamsr -->
{"ne", "8800"}, // 不等於,U 2260 ISOtech -->
{"equiv", "8801"}, // 與U 2261 ISOtech 相同-->
{"le", "8804"}, // 小於或等於,U 2264 ISOtech -->
{"ge", "8805"}, // 大於或等於,U 2265 ISOtech -->
{"sub", "8834"}, // U 2282 ISOtech 的子集-->
{"sup", "8835"}, // U 2283 ISOtech 的超集-->
// // 不是U 2284 ISOamsn 的子集-->
{"sube", "8838"}, // 或等於的子集, U 2286 ISOtech -->
{"supe", "8839"}, // 等於或等於U 2287 ISOtech -->
{"oplus", "8853"}, //圓圈加= 直接求和,U 2295 ISOamsb -->
{"otimes", "8855"}, // 圓圈時間= 向量積,U 2297 ISOamsb -->
{"perp", " 8869 "}, // 上黏性= 正交= 垂直,U 22A5 ISOtech -->
{"sdot", "8901"}, // 點運算子, U 22C5 ISOamsb -->
/ /
//
{"lceil", "8968"} , // 左天花板= apl upstile, U 2308 ISOamsc -->{"rceil", "8969"}, // 右天花板, U 2309 ISOamsc -->{"lfloor", " 8970"}, // 左樓層= apl downstile,U 230A ISOamsc -- >
{"rfloor", "8971"}, // 右樓層, U 230B ISOamsc -->
{"lang ", "9001"}, // 左尖括號= bra,U 2329 ISOtech - ->
//
{"rang", "9002 "}, // 右尖括號= ket,U 232A ISOtech -->
//
{"loz", "9674"}, // 菱形,U 25CA ISOpub -->
//
{"黑桃", "9824"}, // 黑桃花色,U 2660 ISOpub -->
//
{"hearts", "9829"}, // 黑色心型套裝= 情人節,U 2665 ISOpub -->
{"diams", "9830"}, // 黑鑽套裝,U 2666 ISOpub -->
//
{"OElig", "338"}, // -- 拉丁大寫連字OE,U 0152 ISOlat2 -->
{"oelig", "339"}, // -- 拉丁小連字oe , U 0153 ISOlat2 -->
//
{"Scaron", "352"}, // -- 帶有caron 的拉丁文大寫字母S,U 0160 ISOlat2 -->
{"scaron", "353"}, // -- 帶caron 的拉丁小寫字母s,U 0161 ISOlat2 -- >
{"Yuml", "376"}, // -- 帶有分音符的拉丁文大寫字母Y,U 0178 ISOlat2 -->;
//
{"tilde", "732"}, // 小波浪號, U 02DC ISOdia -->
//
{"ensp", "8194"}, // en space, U 2002 ISOpub -->
{ "emsp", "8195"}, // em 空格, U 2003 ISOpub -->
{"thinsp", "8201"}, // 稀疏空間,U 2009 ISOpub -->
{"zwnj ", "8204"}, // 零寬度非連接符,U 200C NEW RFC 2070 -->
{"zwj", "8205"}, // 零寬度連接符,U 200D NEW RFC 2070 -- >
{"lrm", "8206"}, // 從左到右標記,U 200E NEW RFC 2070 -->
{"rlm", "8207"}, // 由右到左標記,U 200F NEW RFC 2070 -->
{"ndash", "8211"}, // en dash, U 2013 ISOpub -->
{"mdash", "8212"}, // em dash , U 2014 ISOpub -->
{"lsquo", "8216"}, // 左單引號,U 2018 ISOnum -->
{"rsquo", "8217"}, // 右單引號,U 2019 ISOnum -->
{"sbquo", "8218"}, // 單低9引號,U 201A NEW -->
{"ldquo", "8220"}, // 左雙引號,U 201C ISOnum -->
{"rdquo", "8221"}, // 右雙引號,U 201D ISOnum -->
{"bdquo", "8222"}, // 雙低9引號,U 201E NEW -->
{"dagger", "8224"}, // dagger, U 2020 ISOpub -->
{"Dagger", "8225"}, // 雙匕首, U 2021 ISOpub -->
{"permil", "8240"}, // 每千分之一符號,U 2030 ISOtech -->
{"lsaquo", "8249"}, // 單左角引號,U 2039 ISO 建議-->
//
{"rsaquo", "8250"}, // 單右角引號,U 203A ISO 提議-->
//
{"euro", "8364"}, // -- 歐元符號,U 20AC NEW -->
};


再擴充下

從前面可以看到轉義字元中間的那段數字是unicode,那麼這個轉移字元可以隨便構造了,並不限於上面的定義,例如中的unicode是20013 ,那麼構造一個轉移字符中,經過瀏覽器的渲染就變回中了,雖然不必這麼繞為了顯示一個字符,但如果在一些不方便傳輸特殊字符的場景就可以派上用途了
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn