📄 formdatamanager.java
字号:
//// ____.// __/\ ______| |__/\. _______// __ .____| | \ | +----+ \// _______| /--| | | - \ _ | : - \_________// \\______: :---| : : | : | \________>// |__\---\_____________:______: :____|____:_____\// /_____|//// . . . i n j a h i a w e t r u s t . . .//// FormDataManager// EV 18.11.2000// POL 08.02.2001//// encode // encodes data from http form (' -> ')// formDecode // encodes special chars for forms (" -> " and '<' -> <)// decode // decodes everything// checkIntegrity// isTagClosed // check if a tag is closed// removeTag// removeTags// removeTagWithContent//package org.jahia.data;import org.jahia.utils.*; // JahiaConsole, JahiaToolsimport java.util.*; // Vectorpublic class FormDataManager { private static FormDataManager theObject = null; private static Vector htmlEntities; /*** * constructor * EV 18.11.2000 * */ private FormDataManager() { JahiaConsole.println( "FormDataManager", "***** Starting up Form Data Manager *****" ); } // end constructor /*** * getInstance * EV 18.11.2000 * */ public static synchronized FormDataManager getInstance() { if (theObject == null) { theObject = new FormDataManager(); } return theObject; } // end getInstance /*** * encode * From the form to the file * Replace single quote to ' * EV 18.11.2000 * POL 09.02.2001 * */ public String encode( String str ) { if (str == null) { return null; } str = JahiaTools.replacePattern(str,"&","X-AND-X"); // internal pseudo tag str = JahiaTools.replacePattern(str,"'","'"); // internal pseudo tag return str; } // end encode /*** * formDecode * from the file to the form * substitutions: < to < * " to " * EV 19.11.2000 * POL 09.02.2001 */ public String formDecode( String str ) { if (str == null) { return null; } str = JahiaTools.replacePattern(str,"X-AND-X","&"); // internal pseudo tag str = JahiaTools.replacePattern(str,"<","<"); str = JahiaTools.replacePattern(str,"'","\'"); str = JahiaTools.replacePattern(str,"&#39;","\'"); str = JahiaTools.replacePattern(str,"&#124;","|"); str = JahiaTools.replacePattern(str,"\"","""); str = JahiaTools.text2html(str); return str; } // end formDecode /*** * decode * From the file to a web page * 1. if we are not in a <html> session -> replace \n with <br/> tag * 2. replace special char with html code * POL 08.02.2001 * */ public String decode( String str ) { if (str == null) { return null; } StringBuffer result = new StringBuffer(str.length() + 500); String strLower = str.toLowerCase(); int startOfIndex = 0; int i = strLower.indexOf("<html>"); while (i != -1) { result.append(JahiaTools.replacePattern(str.substring(startOfIndex, i),"\n","\n<br/>")); startOfIndex = i + 6; // 6 -> <html> i = strLower.indexOf("</html>",startOfIndex); if (i != -1){ result.append(str.substring(startOfIndex, i)); startOfIndex = i + 7; // 7 -> </html> } i = strLower.indexOf("<html>",startOfIndex); } str = result.append(JahiaTools.replacePattern(str.substring(startOfIndex,str.length()),"\n","\n<br/>")).toString(); str = removeTags(str,"body"); // str = removeTag(str,"meta"); // str = removeTag(str,"!doctype"); str = removeTagWithContent(str,"head"); str = removeTagWithContent(str,"title"); str = removeTagWithContent(str,"frame"); str = removeTagWithContent(str,"frameset"); //str = JahiaTools.replacePattern(str,"\\<","<"); str = JahiaTools.replacePattern(str,"X-AND-X","&"); // internal pseudo tag str = JahiaTools.text2html(str); str = JahiaTools.replacePattern(str,"'","'"); str = JahiaTools.replacePattern(str,""","\""); return str; } // end decode /* * Remove a start & end tag in a string * For example removeTags(str,"title") will remove <title> and </title> * @author POL * @version 1.0 POL 23/01/2002 * @param str Input String * @param tag Tag to remove * @return str **/ private String removeTags (String str, String tag) { str = removeTag(str,tag); str = removeTag(str,"/" + tag); return str; } /* * Remove a tag from a string * Exemple: removeTag(str,"body") will remove <body bgcolor="#ffffff"> * @author POL * @version 1.0 POL 23/01/2002 * @param str Input String * @param tag Tag to remove * @return str **/ private String removeTag (String str, String tag) { if (str == null) { return null; } StringBuffer result = new StringBuffer(str.length()); String strLower = str.toLowerCase(); tag = tag.toLowerCase(); int startOfIndex = 0; int i = strLower.indexOf("<" + tag); while (i != -1){ result.append(str.substring(startOfIndex,i)); i = strLower.indexOf(">",i); if (i != -1){ startOfIndex = i + 1; } i = strLower.indexOf("<" + tag, startOfIndex); } str = result.append(str.substring(startOfIndex,str.length())).toString(); return str; } /* * Remove a start and end tag with content from a string * Exemple: removeTag(str,"title") will remove <title>thist is a title</title> * @author POL * @version 1.0 POL 23/01/2002 * @param str Input String * @param tag Tag to remove * @return str **/ private String removeTagWithContent (String str, String tag) { if (str == null) { return null; } StringBuffer result = new StringBuffer(str.length()); String strLower = str.toLowerCase(); tag = tag.toLowerCase(); int startOfIndex = 0; int i = strLower.indexOf("<" + tag); while (i != -1){ result.append(str.substring(startOfIndex,i)); startOfIndex = i + tag.length() + 1; i = strLower.indexOf(tag + ">", startOfIndex ); if (i != -1){ startOfIndex = i + tag.length() + 1; } i = strLower.indexOf("<" + tag, startOfIndex); } str = result.append(str.substring(startOfIndex,str.length())).toString(); return str; } /*** * checkIntegrity * EV 19.11.2000 * called by encode * */ public boolean checkIntegrity( String str ) { if (str == null) { return false; } String testStr = str; int pos = 0; int pos2 = 0; int qtCount = 0; testStr = JahiaTools.replacePattern(str,"\\<",""); // checks "<" and ">" int searchIndex = 0; pos = testStr.indexOf( "<", searchIndex ); while (pos != -1) { pos2 = testStr.indexOf( ">", searchIndex ); pos = testStr.indexOf( "<", pos2 ); if ((pos2 != -1) && ((pos > pos2) || (pos == -1))) { // testStr = testStr.substring( pos2 + 1, testStr.length() ); searchIndex = pos2 + 1; } else { return false; } } // check some tags who should be closed if (! ( // isTagClosed("a",str) && // problem with above & array isTagClosed("b>",str) && isTagClosed("font",str) && isTagClosed("em>",str) && isTagClosed("i>",str) && isTagClosed("h1",str) && isTagClosed("h2",str) && isTagClosed("h3",str) && isTagClosed("table",str) && isTagClosed("script",str) && isTagClosed("span",str) && isTagClosed("div",str) && isTagClosed("layer",str) && isTagClosed("blockquote",str) && isTagClosed("ul",str) && isTagClosed("ol",str) && isTagClosed("form",str) && isTagClosed("comment",str) && isTagClosed("center",str) && isTagClosed("textarea",str) && isTagClosed("select",str) && isTagClosed("xmp",str) && isTagClosed("style",str) && isTagClosed("pre",str) && isTagClosed("u>",str) && isTagClosed("small",str) && isTagClosed("sub",str) && isTagClosed("sup",str) && isTagClosed("s>",str) && isTagClosed("strike",str) && isTagClosed("strong",str) && isTagClosed("tbody",str) && isTagClosed("caption",str) && isTagClosed("colgroup",str) && isTagClosed("col",str) && isTagClosed("tfoot",str) && isTagClosed("th",str) && isTagClosed("thread",str) && isTagClosed("del",str) && isTagClosed("dt",str) && isTagClosed("dd",str) && isTagClosed("dl",str) && isTagClosed("dir",str) && isTagClosed("cite",str) && isTagClosed("code",str) && isTagClosed("fieldset",str) && isTagClosed("label",str) && isTagClosed("object",str) && isTagClosed("map",str) && isTagClosed("dfn",str) && isTagClosed("listing",str) && isTagClosed("marquee",str) && isTagClosed("menu",str) && isTagClosed("multicol",str) && isTagClosed("nobr",str) && isTagClosed("note",str) && isTagClosed("optgroup",str) && isTagClosed("samp",str) && isTagClosed("tt",str) && isTagClosed("kbd",str) && isTagClosed("var",str) && isTagClosed("noembed",str) && isTagClosed("html",str) ) ) { return false; } // checks for '"' in tags searchIndex = 0; // we re-use the above variable, why not ? :) int endTagIndex = 0; int startTagIndex = str.indexOf("<", searchIndex); while (startTagIndex != -1){ endTagIndex = str.indexOf(">",startTagIndex); if (endTagIndex != -1){ String tag = str.substring(startTagIndex,endTagIndex); testStr = str; pos = testStr.indexOf( "\"", searchIndex ); while (pos != -1) { qtCount++; searchIndex = pos + 1; pos = testStr.indexOf( "\"", searchIndex ); } if ((qtCount % 2) != 0) { JahiaConsole.println("FormDataManagerager","Illegal html tag : <" + tag + ">"); return false; } } else { JahiaConsole.println("FormDataManagerager","Tag not closed"); return false; } startTagIndex = str.indexOf("<",endTagIndex); } // all checks passed ! -> return true return true; } // end checkIntegrity /*** * Return true if tag is closed in a string.<br> * For example, <code><table></code> should be closed by <code></table></code><br> * <code>isTagClosed("table","<table><tr><td>hello</td></tr>")</code> will return false.<br> * @author POL * @version 1.0 POL 03/05/2001 * @param tag Tag to check without the <code>< ></code> * @param str Input String * @return Return true if tag is closed */ public boolean isTagClosed( String tag, String inputStr ) { tag = tag.toLowerCase(); String testStr = inputStr.toLowerCase(); String openTag = "<" + tag; String closeTag = "</" + tag; int pos1 = 0; int pos2 = 0; int searchIndex = 0; pos1 = testStr.indexOf( openTag, searchIndex ); while (pos1 != -1) { pos2 = testStr.indexOf( closeTag, searchIndex ); pos1 = testStr.indexOf( openTag , pos2 ); if ((pos2 != -1) && ((pos1 > pos2) || (pos1 == -1))) { searchIndex = pos2 + tag.length() + 2; } else { JahiaConsole.println("FormDataManagerager","ERROR: the HTML tag '" + tag + "' should be closed."); return false; } } return true; } // isTagClosed} // end FormDataManager
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -