最近做论坛碰到了UBB的问题,这个很大众化的东西,怎么没有JAVA写的解释器呢,实在是该写一个。下面的这个不全,但是可以应付一下。
import java.util.*;
public class HTMLString{
public HTMLString(){}
public static String htmlEntities(String str){
return UBB(str);
}
public static boolean hasSpecialCharacter(String str){
/*用于合法性检查
if(str.indexOf("\\")!=-1){
return false;
}
if(str.indexOf("'")!=-1){
return false;
}
if(str.indexOf('"')!=-1){
return false;
}
if(str.indexOf("
return false;
}
if(str.indexOf(">")!=-1){
return false;
}
*/
return true;
}
public static String UBB(String fString){
return (ChkString(FormatStr(fString)));
}
//屏蔽HTML代码,并处理回车和换行
public static String FormatStr(String fString){
/*
fString = repstr(fString, "‘","'");
fString = repstr(fString, "\"","“");
fString = repstr(fString, "<","
fString = repstr(fString, "<","
fString = repstr(fString, ">",">");
fString = repstr(fString, " ","\r");
*/
fString = repstr(fString, "´","'");
fString = repstr(fString, ""","\"");
fString = repstr(fString, "<","
fString = repstr(fString, ">",">");
fString = repstr(fString, ""," ");
fString = repstr(fString, " ","\r");
return (fString);
}
//把UBB代码转换成HTML代码以便正常显示
public static String ChkString(String fString){
fString = fString.trim();
if (fString.equals(""))
fString = " ";
else{
fString = doCode(fString, "", "","","");
fString = doCode(fString, "", "", "", "");
fString = doCode(fString, "", "", "", "");
fString = doCode(fString, "[red]", "[/red]", "", "");
fString = doCode(fString, "[green]", "[/green]", "", "");
fString = doCode(fString, "[blue]", "[/blue]", "", "");
fString = doCode(fString, "[white]", "[/white]", "", "");
fString = doCode(fString, "[purple]", "[/purple]", "", "");
fString = doCode(fString, "[yellow]", "[/yellow]", "", "");
fString = doCode(fString, "[violet]", "[/violet]", "", "");
fString = doCode(fString, "[brown]", "[/brown]", "", "");
fString = doCode(fString, "[black]", "[/black]", "", "");
fString = doCode(fString, "[pink]", "[/pink]", "", "");
fString = doCode(fString, "[orange]", "[/orange]", "", "");
fString = doCode(fString, "[gold]", "[/gold]", "", "");
fString = doCode(fString, "
", "
", "", "
");fString = doCode(fString, "
", "
", "", "
");fString = doCode(fString, "
", "
", "", "
");fString = doCode(fString, "
", "
", "", "
");fString = doCode(fString, "
", "
", "", "
");fString = doCode(fString, "
", "
", "", "
");fString = doCode(fString, "[size=1]", "[/size=1]", "", "");
fString = doCode(fString, "[size=2]", "[/size=2]", "", "");
fString = doCode(fString, "[size=3]", "[/size=3]", "", "");
fString = doCode(fString, "[size=4]", "[/size=4]", "", "");
fString = doCode(fString, "[size=5]", "[/size=5]", "", "");
fString = doCode(fString, "[size=6]", "[/size=6]", "", "");
fString = doCode(fString, "[left]", "[/left]", "
", "");
fString = doCode(fString, "
", "", "", "");
fString = doCode(fString, "
", "", "", "");
fString = doCode(fString, "
", "
", "
");
fString = doCode(fString, "[url]", "[/url]", "", "");
fString = addlink(fString);
fString = addBr(fString);
}
return (fString);
}
//方便的替换函数
public static String doCode(String fString,String fOTag, String fCTag, String fROTag, String fRCTag){
fString = repstr(fString, fROTag, fOTag);
fString = repstr(fString, fRCTag, fCTag);
return (fString);
}
//处理链接
public static String addlink(String str){
String hrefTagPre = "";
String hrefTagLast = "";
String hrefTxt = "";
String strReturn = "";
int iSearchedFrom = 0 ;
int first = 0;
int last = 0;
while (( iSearchedFrom=str.indexOf( hrefTagPre , iSearchedFrom) ) != -1 ){
first = iSearchedFrom + 3;
if (( iSearchedFrom=str.indexOf( hrefTagLast , iSearchedFrom) ) != -1 ){
last = iSearchedFrom;
iSearchedFrom += 4;
strReturn = str.substring( first, last);
if (strReturn.indexOf( "", 0) != -1){
strReturn = repstr ( strReturn , "", "");
}
hrefTxt = "" + strReturn + "";
strReturn = str.substring( first - 3 , iSearchedFrom);
str = repstr(str, hrefTxt ,strReturn );
iSearchedFrom =0;
}else
break;
}
return (str);
}
public static String fd(String str){
String fd=repstr(str,"''","'");
return fd;
}
public static String repstr(String str, String strDen, String strSrc){
int iLen = str.length();
int iDenLen = strDen.length();
int iSrcLen = strSrc.length();
String strReturn = "";
int iSearchedFrom = 0 ;
int iPrevSearchedFrom = 0;
while ( (iSearchedFrom = str.indexOf(strSrc , iSearchedFrom)) != -1 ){
strReturn += str.substring(iPrevSearchedFrom, iSearchedFrom);
strReturn += strDen;
iSearchedFrom += iSrcLen;
iPrevSearchedFrom = iSearchedFrom;
}
if ( iPrevSearchedFrom !=0 )
strReturn += str.substring( str.lastIndexOf(strSrc) + iSrcLen , str.length());
else
strReturn = str;
return(strReturn);
}
public static String RemoveComment(String Content){
String makeContent=new String();
StringTokenizer strToken=new StringTokenizer(Content,"\n");
String tempToken=null;
while(strToken.hasMoreTokens()){
tempToken=strToken.nextToken();
if(tempToken.indexOf(":")!=0)
makeContent=makeContent+tempToken+"\n";
}
return makeContent;
}
public static String addBr(String Content){
String makeContent=new String();
StringTokenizer strToken=new StringTokenizer(Content,"\n");
while(strToken.hasMoreTokens()){
String sNext = strToken.nextToken();
makeContent=makeContent + sNext.substring(0,sNext.length()-1) + "
";
}
return makeContent;
}
public static String delBr(String Content){
String makeContent=new String();
StringTokenizer strToken=new StringTokenizer(Content,"
");
while(strToken.hasMoreTokens()){
String sNext = strToken.nextToken();
makeContent=makeContent + sNext.substring(0,sNext.length()-4) + "\n";
}
return makeContent;
}
}