📄 htmlutils.java
字号:
writeDecimalReference(c, escaped);
continue;
}
if (c == 376) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 402) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 710) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 732) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 913 && c <= 929) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 931 && c <= 937) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 945 && c <= 969) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 977 && c <= 978) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 982) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8194 && c <= 8195) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8201) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8204 && c <= 8207) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8211 && c <= 8212) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8216 && c <= 8218) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8220 && c <= 8222) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8224 && c <= 8226) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8230) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8240) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8242 && c <= 8243) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8249 && c <= 8250) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8254) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8260) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8364) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8465) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8472) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8476) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8482) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8501) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8592 && c <= 8596) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8629) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8656 && c <= 8660) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8704) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8706 && c <= 8707) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8709) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8711 && c <= 8713) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8715) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8719) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8721 && c <= 8722) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8727) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8730) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8733 && c <= 8734) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8736) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8743 && c <= 8747) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8756) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8764) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8773) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8776) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8800 && c <= 8801) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8804 && c <= 8805) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8834 && c <= 8836) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8838 && c <= 8839) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8853) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8855) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8869) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 8901) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 8968 && c <= 8971) {
writeDecimalReference(c, escaped);
continue;
}
if (c >= 9001 && c <= 9002) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 9674) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 9824) {
writeDecimalReference(c, escaped);
continue;
}
if (c == 9827) {
writeDecimalReference(c, escaped);
continue;
}
// all other chars
escaped.append(c);
}
return escaped.toString();
}
/**
* Turn HTML character references into their plain text UNICODE equivalent.
* <p>Handles complete character set defined in HTML 4.01 recommendation
* and all reference types (decimal, hex, and entity).
* <p>Correctly converts the following formats:
* <blockquote>
* &#<i>Decimal</i>; - <i>(Example: &#68;)</i><br>
* &#x<i>Hex</i>; - <i>(Example: &#xE5;) case insensitive</i><br>
* &#<i>Entity</i>; - <i>(Example: &amp;) case sensitive</i>
* </blockquote>
* Gracefully handles malformed character references by copying original
* characters as is when encountered.<p>
* <p>Reference:
* <a href="http://www.w3.org/TR/html4/sgml/entities.html">
* http://www.w3.org/TR/html4/sgml/entities.html
* </a>
*/
public static String htmlUnescape(String s) {
if (s == null) {
return null;
}
StringBuffer unescaped = new StringBuffer(s.length());
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '&') {
// don't look more than 12 chars ahead as reference like strings
// should not be longer than 12 chars in length (including ';')
// prevents the entire string from being searched when an '&'
// with no following ';' is an encountered
int start = Math.min(i + 1, s.length() - 1);
int end = Math.min(s.length(), start + 12);
String reference = s.substring(start, end);
int semi = reference.indexOf(';');
if (semi == -1) {
unescaped.append(c);
continue;
}
reference = reference.substring(0, semi);
i = start + semi;
// try entity reference first
Integer iso = (Integer) ENTITIES.get(reference);
if (iso != null) {
unescaped.append((char) iso.intValue());
continue;
}
if (reference.length() == 0) {
unescaped.append(EMPTY_REFERENCE);
continue;
}
if (reference.charAt(0) == '#') {
if (reference.length() > 2) {
int index = 1;
if (reference.charAt(1) == 'x' || reference.charAt(1) == 'X') {
index = 2;
}
try {
unescaped.append(
(char) Integer.parseInt(
reference.substring(index),
(index == 1) ? 10 : 16));
continue;
}
catch (NumberFormatException e) {
// wasn't hex or decimal, copy original chars
unescaped.append('&' + reference + ';');
continue;
}
}
unescaped.append(MALFORMED_REFERENCE);
continue;
}
// may not be valid reference, forget it
i = start - 1;
}
unescaped.append(c);
}
return unescaped.toString();
}
/**
* Write the given character as decimal reference.
* @param c the character to write
* @param buf the buffer to write into
*/
private static void writeDecimalReference(char c, StringBuffer buf) {
buf.append(REFERENCE_START);
buf.append((int) c);
buf.append(';');
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -