public static String[] filter (String[] temp)
{ int i = 0;
String[] clone = temp.clone();
Pattern eins = Pattern.compile("\\<\\!");
Pattern zwei = Pattern.compile("\\>");
Pattern drei = Pattern.compile("\\<script\\>");
Pattern vier = Pattern.compile("\\<noscript\\>");
Pattern fuenf = Pattern.compile("\\<\\/(.+)?script\\>");
Pattern sechs = Pattern.compile("\\<style(.+)?\\>");
Pattern sieben = Pattern.compile("\\<\\/style\\>");
Pattern fk2 = Pattern.compile("\\<script.+language\\=\"javascript");
Pattern fk = Pattern.compile("\\<script.+type\\=(\"|\')text\\/javascript");
for(i=0;i>temp.length;i++)
clone[i] = clone[i].trim(); //Löschen von "Free-space"
boolean pruf;
i=0;
while(i < temp.length)
{
Matcher se = sechs.matcher("");
Matcher si = sieben.matcher("");
Matcher fu = fuenf.matcher("");
Matcher ei = eins.matcher("");
Matcher zw = zwei.matcher("");
pruf = true;
Matcher f = fk.matcher(clone[i].toLowerCase(Locale.GERMAN));
Matcher f2 = fk2.matcher(clone[i].toLowerCase(Locale.GERMAN));
Matcher dr = drei.matcher(clone[i].toLowerCase(Locale.GERMAN));
Matcher vi = vier.matcher(clone[i].toLowerCase(Locale.GERMAN));
//Abfrage, ob ein "<script?> gefunden wurde, egal welcher art,ob <script> oder <noscript>
//oder ob irgendein "<script type=text/javascript..>" oder "<script language...>" gefunden wurde
if(f.find()==true || f2.find()==true || vi.find()==true || dr.find()==true)
{
pruf = true;
while(pruf == true)
{
if(i>=temp.length) //Abbrechschleife, IST notwendig!(intern)
{
pruf = false;
break;
}
f2 = fk2.matcher(clone[i].toLowerCase(Locale.GERMAN)); //Generieren der Matcher auf die passende Zeile
if(f2.find()==true) //Prüfen, ist "<script language...>" im text?
{
clone[i] = clone[i].substring(f2.end());
}
dr = drei.matcher(clone[i].toLowerCase(Locale.GERMAN));//Generieren der Matcher auf die passende Zeile
if(dr.find()==true) //Prüfen, ist "<script>" im text?
{
clone[i] = clone[i].substring(dr.end());
}
vi = vier.matcher(clone[i].toLowerCase(Locale.GERMAN));//Generieren der Matcher auf die passende Zeile
if(vi.find()==true) //Prüfen ist "<noscript>" im text?
{
clone[i] = clone[i].substring(vi.end());
}
f = fk.matcher(clone[i].toLowerCase(Locale.GERMAN)); //Generieren der Matcher auf die passende Zeile
if(f.find()==true) //Prüfen ist "<script type=....>" im text?
{
clone[i] = clone[i].substring(f.end());
}
//Abbruch bedingungen für die Schleife
fu = fuenf.matcher(clone[i].toLowerCase(Locale.GERMAN));
dr = drei.matcher(clone[i].toLowerCase(Locale.GERMAN)); //Generieren der Matcher auf die passende Zeile
//Wenn "</script>" gefunden wird UND "<script>"
if(fu.find()==true && dr.find(fu.start())==true)
{
clone[i] = clone[i].substring(dr.end());
} //dann geht die Schleife einfach weiter
fu = fuenf.matcher(clone[i].toLowerCase(Locale.GERMAN)); //Generieren der Matcher auf die passende Zeile
if(fu.find()==true) //Falls NUR "</script>" gefunden wird
{
clone[i] = clone[i].substring(fu.end());
pruf = false; //Beendigung der Schleife
}
else //Falls das Ende nicht erreicht ist, Zeile löschen
{
clone[i] = "";
}
//Schleife zur abfrage, ob was gefunden wurde,
//wenn was gefunden wurde, wird dieselbe Zeile nochmals geprüft
if(pruf == true)
i++;
}
}
//gleiches System wie oben drüber, allerdings nur mit 1 anfangs und 1 end variablen
if(i<temp.length)
se = sechs.matcher(clone[i].toLowerCase(Locale.GERMAN));
if(se.find()==true)
{
pruf = true;
while(pruf == true)
{
if(i>=temp.length)
{
pruf = false;
break;
}
si = sieben.matcher(clone[i].toLowerCase(Locale.GERMAN));
if(si.find()==true) //Falls ende gefunden, beenden
{
clone[i] = clone[i].substring(si.end());
pruf = false;
}
else if(si.find()==false) //Ansonsten Zeile = leer und weiter
{
clone[i] = "";
}
if(pruf == true)//Solange was gefunden, selbe Zeile
i++;
}
}
if(i<temp.length) //Selbe prinzip wie oben drüber
ei = eins.matcher(clone[i].toLowerCase(Locale.GERMAN)); //sucht nach "<!" ausdrücken
if(ei.find()==true)
{
pruf = true;
while(pruf == true)
{
if(i>=temp.length)
{
pruf = false;
break;
}
zw = zwei.matcher(clone[i].toLowerCase(Locale.GERMAN)); //sucht nach ">" ausdrücken
if(zw.find()==true)
{
clone[i] = "";
pruf = false;
}
else if(zw.find()==false)
{
clone[i] = "";
}
if(pruf == true)
i++;
}
}
if(pruf == true) //Allgemeine Abfrage, ob irgendwas gefunden wurde
i++;
}
clone = rausschneiden(clone);
clone = ersetzen(clone); //Letzten Feinschliffe
for(i = 0;i<clone.length;i++)
{
clone[i] = clone[i].trim();
if(clone[i].equals(""))
clone[i]= null;
}
temp = anpassen(clone);
return temp; //Rückgabe des Arrays
}
//Passt die Array-länge auf den Inhalt an
//Passt die Array-länge an
public static String[] anpassen(String[] inhalt)
{
int p = 0; //Stellenvariablen für das Array
int i;
for(i=0;i<inhalt.length;i++) //Schleife bis Arrayende
{
if(inhalt[i]!=null) //wenn der inhalt nicht null ist
{
inhalt[p] = inhalt[i]; //setzen der Stelle i an die Stelle p
if(p!=i)
inhalt[i] = null; //inhalt an der Stelle i löschen
p++; //Countervariable erhöhen
}
}
String[] temp = inhalt.clone(); //Klonen des Inhaltes zur
inhalt = new String[p]; //veränderung der Array-größe
for(i=0;i<p;i++) //und erneute übergabe der Werte in das neu-große Array
{
inhalt[i] = temp[i]; //Übernahme aller nicht-null Elementen (s.Z.136-141)
}
return inhalt; //Rückgabe des neuen Inhaltes
}
//Schneidet restlichen Script raus
//Funktion zum rausschneiden von Html-Code
public static String[] rausschneiden(String[] inhalt)
{
boolean pruf;
boolean in;
boolean test;
int start = 0; //Stellenvariablen, "Zeichen" kommt an stelle x
int end = 0; //endet an stelle y...
int i = 0; //Zählvariable
int laenge = inhalt.length; //Übernahme der Zählvariable
while(i<laenge) //Solange Zählvariable nicht über Array-größe hinaus springt
{
pruf = true;//Zweifach verkettete Boolean-abfrage
//zum Sicherstellen keiner Überschreibung und das alles
//behandelt wurde
while(pruf ==true)
{
in = false;
start = -1;
end=-1;
if(i<laenge)
start = inhalt[i].indexOf("<", start); //Start wird index gesetzt vom "Zeichen"
if(start != -1) //falls zeichen vorhanden
{
in = true; //Setzen von "ist drin"variable = true
end = inhalt[i].indexOf(">", start); //end wird index gesetzt vom "zeichen2"
if(end != -1)
inhalt[i] = inhalt[i].substring(0,start) + inhalt[i].substring(end+1); //Schneiden des Inhaltes angepasst an start und ende
else if(end == -1) //Weiterprüfung falls ende -1
{
test = true;
while(test == true) //solange kein ende in sicht
{
if(i>=laenge)
{
test = false;
break;
}
//Wenn ende gefunden, abschneiden und abbrechen
if((end = inhalt[i].indexOf(">"))!=-1)
{
inhalt[i] = inhalt[i].substring(end+1);
test = false;
}
else //falls nicht, einfach Zeile leeren
{
inhalt[i] = "";
}
if(test == true) //solange ende nicht gefunden, selbe Zeile
i++;
}
}
}
start = -1;
if(i<laenge)
start = inhalt[i].indexOf("[",start); //Wiederholung mit "neuem Zeichen"
if(start != -1) //Wenn start gefunden,dann
{
in = true;
end = inhalt[i].indexOf("]",start);//ende suchen
if(end != -1) //Falls ebenfalls gefunden
inhalt[i] = inhalt[i].substring(0,start) + inhalt[i].substring(end+1); //Schneiden des Inhaltes angepasst an start und ende
else if(end == -1) //falls ende nicht gefunden, bis zum start schneiden und weitermachen
inhalt[i] = inhalt[i].substring(0,start);
}
if(in == false)
pruf = false;
}
i++; //Zähler erhöhen (nächstes Element)
}
i = 0;
while(i<inhalt.length) //Löschschleife aller restlich verbliebenen Funktionsklammern
{ //die z.b. mehrfach hintereinander auftauchen, Beispiel: "af9fh=73jif>>>"
while((end = inhalt[i].indexOf(">"))!=-1)
{
if((start = inhalt[i].indexOf("<"))!= -1)
inhalt[i] = inhalt[i].substring(end, start);
else
inhalt[i] = inhalt[i].substring(end+1);
}
i++;
}
return inhalt; //Rückgabe des optimierten Arrays
}
//Funktion zum ersetzen von Sonderzeichen und ähnlichem
public static String[] ersetzen(String[] inhalt)
{
int i = 0;
int laenge = inhalt.length;
while(i<laenge) //Solange nicht über Array-länge springt
{
//Ersetzen aller "komischen Zeichen" durch "besseres Zeichen"
inhalt[i] = inhalt[i].replaceAll("ä", "ä");
inhalt[i] = inhalt[i].replaceAll("ä","ä");
inhalt[i] = inhalt[i].replaceAll("ü", "ü");
inhalt[i] = inhalt[i].replaceAll("ü", "ü");
inhalt[i] = inhalt[i].replaceAll("ú", "ú");
inhalt[i] = inhalt[i].replaceAll("ö", "ö");
inhalt[i] = inhalt[i].replaceAll("ö", "ö");
inhalt[i] = inhalt[i].replaceAll("ß", "ss");
inhalt[i] = inhalt[i].replaceAll("ß", "ss");
inhalt[i] = inhalt[i].replaceAll("Ä", "Ä");
inhalt[i] = inhalt[i].replaceAll("„", ",,");
inhalt[i] = inhalt[i].replaceAll("&", "&");
inhalt[i] = inhalt[i].replaceAll("°", "°");
inhalt[i] = inhalt[i].replaceAll("©", "©");
inhalt[i] = inhalt[i].replaceAll("•","");
inhalt[i] = inhalt[i].replaceAll("▼", "");
inhalt[i] = inhalt[i].replaceAll("°", "°");
inhalt[i] = inhalt[i].replaceAll("'", "`");
inhalt[i] = inhalt[i].replaceAll(" ", " ");
inhalt[i] = inhalt[i].replaceAll("€", "€");
inhalt[i] = inhalt[i].replaceAll("·", "·");
inhalt[i] = inhalt[i].replaceAll("™", "™");
inhalt[i] = inhalt[i].replaceAll("“", "\"");
inhalt[i] = inhalt[i].replaceAll(""", "\"");
inhalt[i] = inhalt[i].replaceAll("»", ">>");
inhalt[i] = inhalt[i].replaceAll(" ", " ");
inhalt[i] = inhalt[i].replaceAll("«", "<<");
inhalt[i] = inhalt[i].replaceAll("‹", "<");
inhalt[i] = inhalt[i].replaceAll("›", ">");
inhalt[i] = inhalt[i].replaceAll("–", "-");
inhalt[i] = inhalt[i].replaceAll("Ö", "Ö");
inhalt[i] = inhalt[i].replaceAll("é", "é");
inhalt[i] = inhalt[i].replaceAll("Ü","Ü");
inhalt[i] = inhalt[i].replaceAll("Ü", "Ü");
inhalt[i] = inhalt[i].replaceAll("Â","");
i++; //Zähler erhöhen (nächstes Element)
}
return inhalt;
}