java对html转移的语言反编译-org apache commons lang3包有个StringEscapeUti

这篇博客介绍了如何在Java中利用Apache Commons Lang3包的StringEscapeUtils工具类进行HTML、JavaScript等语言的转义和反编译操作,包括escapeJava、unescapeJava、escapeHtml、unescapeHtml、escapeXml、unescapeXml以及escapeJavaScript和unescapeJavaScript等方法的使用。同时,作者建议避免转义后存储,以防止字符混乱问题,推荐仅在查询时进行特殊字符转义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

               

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};        @Override        public 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};        @Override        public 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 quotes            String 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);    }}

针对转译,尽量不要进行转译后入库,只做查询出特殊字符的转译,或者自己写具体字符的转译,防止转译编码等导致字符混乱


           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值