📄 encoder.java
字号:
return null;
}
StringBuffer ret = new StringBuffer();
// URLEncode the text string. This produces a very similar encoding to JavaSscript
// encoding, except the blank which is not encoded into a %20.
String enc = encode(source, encoding, true);
for(int z = 0;z < enc.length();z++) {
if(enc.charAt(z) == '+') {
ret.append("%20");
}
else {
ret.append(enc.charAt(z));
}
}
return ret.toString();
}
/**
* Escapes a String so it may be printed as text content or attribute
* value in a HTML page or an XML file.<p>
*
* This method replaces the following characters in a String:
* <ul>
* <li><b><</b> with &lt;
* <li><b>></b> with &gt;
* <li><b>&</b> with &amp;
* <li><b>"</b> with &quot;
* </ul>
*
* @param source the string to escape
* @return the escaped string
*
* @see #escapeHtml(String)
*/
public static String escapeXml(String source) {
if (source == null) return null;
StringBuffer result = new StringBuffer(source.length()*2);
int terminatorIndex;
for(int i = 0;i < source.length(); ++i) {
char ch = source.charAt(i);
switch (ch) {
case '<' :
result.append("<");
break;
case '>' :
result.append(">");
break;
case '&' :
// Don't escape already escaped international and special characters
if ((terminatorIndex = source.indexOf(";",i)) > 0)
if(source.substring(i + 1, terminatorIndex).matches("#[0-9]+"))
result.append(ch);
else
result.append("&");
else
result.append("&");
break;
case '"' :
result.append(""");
break;
default :
result.append(ch);
}
}
return new String(result);
}
/**
* Escapes special characters in a HTML-String with their number-based
* entity representation, for example & becomes &#38;.<p>
*
* A character <code>num</code> is replaced if<br>
* <code>((ch != 32) && ((ch > 122) || (ch < 48) || (ch == 60) || (ch == 62)))</code><p>
*
* @param source the String to escape
* @return String the escaped String
*
* @see #escapeXml(String)
*/
public static String escapeHtml(String source) {
int terminatorIndex;
if (source == null) return null;
StringBuffer result = new StringBuffer(source.length()*2);
for(int i = 0;i < source.length();i++) {
int ch = source.charAt(i);
// Avoid escaping already escaped characters;
if((ch == 38) && ((terminatorIndex = source.indexOf(";",i)) > 0)) {
if(source.substring(i + 1, terminatorIndex).matches("#[0-9]+|lt|gt|amp|quote")) {
result.append(source.substring(i, terminatorIndex + 1));
// Skip remaining chars up to (and including) ";"
i = terminatorIndex;
continue;
}
}
if((ch != 32) && ((ch > 122) || (ch < 48) || (ch == 60) || (ch == 62))) {
result.append("&#");
result.append(ch);
result.append(";");
}
else {
result.append((char)ch);
}
}
return new String(result);
}
/**
* Escapes non ASCII characters in a HTML-String with their number-based
* entity representation, for example & becomes &#38;.<p>
*
* A character <code>num</code> is replaced if<br>
* <code>(ch > 255)</code><p>
*
* @param source the String to escape
* @return String the escaped String
*
* @see #escapeXml(String)
*/
public static String escapeNonAscii(String source) {
if (source == null) return null;
StringBuffer result = new StringBuffer(source.length()*2);
for(int i = 0;i < source.length();i++) {
int ch = source.charAt(i);
if(ch > 255) {
result.append("&#");
result.append(ch);
result.append(";");
}
else {
result.append((char)ch);
}
}
return new String(result);
}
/**
* Decodes a String in a way that is compatible with the JavaScript
* unescape function.
*
* @param Source The String to be decoded.
* @return The JavaScript unescaped String.
*/
public static String unescape(String source, String encoding) {
if(source == null){
return null;
}
int len = source.length();
// to use standard decoder we need to replace '+' with "%20" (space)
StringBuffer preparedSource = new StringBuffer(len);
for (int i = 0; i < len; i++) {
char c = source.charAt(i);
if (c == '+') {
preparedSource.append("%20");
} else {
preparedSource.append(c);
}
}
return decode(preparedSource.toString(), encoding, true);
}
/**
* Changes the encoding of a byte array that represents a String.<p>
*
* @param input the byte array to convert
* @param oldEncoding the current encoding of the byte array
* @param newEncoding the new encoding of the byte array
* @return byte[] the byte array encoded in the new encoding
*/
public static byte[] changeEncoding(byte[] input, String oldEncoding, String newEncoding) {
if ((oldEncoding == null) || (newEncoding == null)) return input;
if (oldEncoding.trim().equalsIgnoreCase(newEncoding.trim())) return input;
byte[] result = input;
try {
result = (new String(input, oldEncoding)).getBytes(newEncoding);
} catch (UnsupportedEncodingException e) {
// return value will be input value
}
return result;
}
/**
* Re-decodes a String that has not been correctly decoded and thus has scrambled
* character bytes.<p>
*
* This is an equivalent to the JavaScript "decodeURIComponent" function.
* It converts from the default "UTF-8" to the currently selected system encoding.<p>
*
* @param input the String to convert
* @return String the converted String
*/
public static String redecodeUriComponent(String input) {
if (input == null) return input;
return new String(changeEncoding(input.getBytes(), C_URI_ENCODING, A_OpenCms.getDefaultEncoding()));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -