本文主要是介绍java对html转移的语言反编译-org.apache.commons.lang3包有个StringEscapeUtils,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
StringEscapeUtils
用escapeJava方法转义
用unescapeJava方法反转义
用escapeHtml方法转义
用unescapeHtml方法反转义
用escapeXml方法转义
用unescapeXml方法反转义
用escapeJavaScript方法转义
用unescapeJavaScript方法反转义
源码内容方法
/** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements. See the NOTICE file distributed with* this work for additional information regarding copyright ownership.* The ASF licenses this file to You under the Apache License, Version 2.0* (the "License"); you may not use this file except in compliance with* the License. You may obtain a copy of the License at* * http://www.apache.org/licenses/LICENSE-2.0* * Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/
package org.apache.commons.lang3;import java.io.IOException;
import java.io.Writer;import org.apache.commons.lang3.text.translate.AggregateTranslator;
import org.apache.commons.lang3.text.translate.CharSequenceTranslator;
import org.apache.commons.lang3.text.translate.EntityArrays;
import org.apache.commons.lang3.text.translate.LookupTranslator;
import org.apache.commons.lang3.text.translate.NumericEntityUnescaper;
import org.apache.commons.lang3.text.translate.OctalUnescaper;
import org.apache.commons.lang3.text.translate.UnicodeEscaper;
import org.apache.commons.lang3.text.translate.UnicodeUnescaper;/*** <p>Escapes and unescapes {@code String}s for* Java, Java Script, HTML and XML.</p>** <p>#ThreadSafe#</p>* @since 2.0* @version $Id: StringEscapeUtils.java 1148520 2011-07-19 20:53:23Z ggregory $*/
public class StringEscapeUtils {/* ESCAPE TRANSLATORS */public static final CharSequenceTranslator ESCAPE_JAVA = new LookupTranslator(new String[][] { {"\"", "\\\""},{"\\", "\\\\"},}).with(new LookupTranslator(EntityArrays.JAVA_CTRL_CHARS_ESCAPE())).with(UnicodeEscaper.outsideOf(32, 0x7f) );public static final CharSequenceTranslator ESCAPE_ECMASCRIPT = new AggregateTranslator(new LookupTranslator(new String[][] { {"'", "\\'"},{"\"", "\\\""},{"\\", "\\\\"},{"/", "\\/"}}),new LookupTranslator(EntityArrays.JAVA_CTRL_CHARS_ESCAPE()),UnicodeEscaper.outsideOf(32, 0x7f) );public static final CharSequenceTranslator ESCAPE_XML = new AggregateTranslator(new LookupTranslator(EntityArrays.BASIC_ESCAPE()),new LookupTranslator(EntityArrays.APOS_ESCAPE()));public static final CharSequenceTranslator ESCAPE_HTML3 = new AggregateTranslator(new LookupTranslator(EntityArrays.BASIC_ESCAPE()),new LookupTranslator(EntityArrays.ISO8859_1_ESCAPE()));public static final CharSequenceTranslator ESCAPE_HTML4 = new AggregateTranslator(new LookupTranslator(EntityArrays.BASIC_ESCAPE()),new LookupTranslator(EntityArrays.ISO8859_1_ESCAPE()),new LookupTranslator(EntityArrays.HTML40_EXTENDED_ESCAPE()));public static final CharSequenceTranslator ESCAPE_CSV = new CsvEscaper();// TODO: Create a parent class - 'SinglePassTranslator' ?// It would handle the index checking + length returning, // and could also have an optimization check method.static class CsvEscaper extends CharSequenceTranslator {private static final char CSV_DELIMITER = ',';private static final char CSV_QUOTE = '"';private static final String CSV_QUOTE_STR = String.valueOf(CSV_QUOTE);private static final char[] CSV_SEARCH_CHARS = new char[] {CSV_DELIMITER, CSV_QUOTE, CharUtils.CR, CharUtils.LF};@Overridepublic int translate(CharSequence input, int index, Writer out) throws IOException {if(index != 0) {throw new IllegalStateException("CsvEscaper should never reach the [1] index");}if (StringUtils.containsNone(input.toString(), CSV_SEARCH_CHARS)) {out.write(input.toString());} else {out.write(CSV_QUOTE);out.write(StringUtils.replace(input.toString(), CSV_QUOTE_STR, CSV_QUOTE_STR + CSV_QUOTE_STR));out.write(CSV_QUOTE);}return input.length();}}/* UNESCAPE TRANSLATORS */// TODO: throw "illegal character: \92" as an Exception if a \ on the end of the Java (as per the compiler)?public static final CharSequenceTranslator UNESCAPE_JAVA = new AggregateTranslator(new OctalUnescaper(), // .between('\1', '\377'),new UnicodeUnescaper(),new LookupTranslator(EntityArrays.JAVA_CTRL_CHARS_UNESCAPE()),new LookupTranslator(new String[][] { {"\\\\", "\\"},{"\\\"", "\""},{"\\'", "'"},{"\\", ""}}));public static final CharSequenceTranslator UNESCAPE_ECMASCRIPT = UNESCAPE_JAVA;public static final CharSequenceTranslator UNESCAPE_HTML3 = new AggregateTranslator(new LookupTranslator(EntityArrays.BASIC_UNESCAPE()),new LookupTranslator(EntityArrays.ISO8859_1_UNESCAPE()),new NumericEntityUnescaper());public static final CharSequenceTranslator UNESCAPE_HTML4 = new AggregateTranslator(new LookupTranslator(EntityArrays.BASIC_UNESCAPE()),new LookupTranslator(EntityArrays.ISO8859_1_UNESCAPE()),new LookupTranslator(EntityArrays.HTML40_EXTENDED_UNESCAPE()),new NumericEntityUnescaper());public static final CharSequenceTranslator UNESCAPE_XML = new AggregateTranslator(new LookupTranslator(EntityArrays.BASIC_UNESCAPE()),new LookupTranslator(EntityArrays.APOS_UNESCAPE()),new NumericEntityUnescaper());public static final CharSequenceTranslator UNESCAPE_CSV = new CsvUnescaper();static class CsvUnescaper extends CharSequenceTranslator {private static final char CSV_DELIMITER = ',';private static final char CSV_QUOTE = '"';private static final String CSV_QUOTE_STR = String.valueOf(CSV_QUOTE);private static final char[] CSV_SEARCH_CHARS = new char[] {CSV_DELIMITER, CSV_QUOTE, CharUtils.CR, CharUtils.LF};@Overridepublic int translate(CharSequence input, int index, Writer out) throws IOException {if(index != 0) {throw new IllegalStateException("CsvUnescaper should never reach the [1] index");}if ( input.charAt(0) != CSV_QUOTE || input.charAt(input.length() - 1) != CSV_QUOTE ) {out.write(input.toString());return input.length();}// strip quotesString quoteless = input.subSequence(1, input.length() - 1).toString();if ( StringUtils.containsAny(quoteless, CSV_SEARCH_CHARS) ) {// deal with escaped quotes; ie) ""out.write(StringUtils.replace(quoteless, CSV_QUOTE_STR + CSV_QUOTE_STR, CSV_QUOTE_STR));} else {out.write(input.toString());}return input.length();}}public StringEscapeUtils() {super();}public static final String escapeJava(String input) {return ESCAPE_JAVA.translate(input);}public static final String escapeEcmaScript(String input) {return ESCAPE_ECMASCRIPT.translate(input);}public static final String unescapeJava(String input) {return UNESCAPE_JAVA.translate(input);}public static final String unescapeEcmaScript(String input) {return UNESCAPE_ECMASCRIPT.translate(input);}public static final String escapeHtml4(String input) {return ESCAPE_HTML4.translate(input);}public static final String escapeHtml3(String input) {return ESCAPE_HTML3.translate(input);}public static final String unescapeHtml4(String input) {return UNESCAPE_HTML4.translate(input);}public static final String unescapeHtml3(String input) {return UNESCAPE_HTML3.translate(input);}public static final String escapeXml(String input) {return ESCAPE_XML.translate(input);}public static final String unescapeXml(String input) {return UNESCAPE_XML.translate(input);}//-----------------------------------------------------------------------public static final String escapeCsv(String input) {return ESCAPE_CSV.translate(input);}public static final String unescapeCsv(String input) {return UNESCAPE_CSV.translate(input);}}
针对转译,尽量不要进行转译后入库,只做查询出特殊字符的转译,或者自己写具体字符的转译,防止转译编码等导致字符混乱
这篇关于java对html转移的语言反编译-org.apache.commons.lang3包有个StringEscapeUtils的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!