最近做论坛碰到了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("<")!=-1){
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, "<b>", "</b>","<b>","</b>");
fstring = docode(fstring, "<u>", "</u>", "<u>", "</u>");
fstring = docode(fstring, "<i>", "</i>", "<i>", "</i>");
fstring = docode(fstring, "[red]", "[/red]", "<font color=red>", "</font id=red>");
fstring = docode(fstring, "[green]", "[/green]", "<font color=green>", "</font id=green>");
fstring = docode(fstring, "[blue]", "[/blue]", "<font color=blue>", "</font id=blue>");
fstring = docode(fstring, "[white]", "[/white]", "<font color=white>", "</font id=white>");
fstring = docode(fstring, "[purple]", "[/purple]", "<font color=purple>", "</font id=purple>");
fstring = docode(fstring, "[yellow]", "[/yellow]", "<font color=yellow>", "</font id=yellow>");
fstring = docode(fstring, "[violet]", "[/violet]", "<font color=violet>", "</font id=violet>");
fstring = docode(fstring, "[brown]", "[/brown]", "<font color=brown>", "</font id=brown>");
fstring = docode(fstring, "[black]", "[/black]", "<font color=black>", "</font id=black>");
fstring = docode(fstring, "[pink]", "[/pink]", "<font color=pink>", "</font id=pink>");
fstring = docode(fstring, "[orange]", "[/orange]", "<font color=orange>", "</font id=orange>");
fstring = docode(fstring, "[gold]", "[/gold]", "<font color=gold>", "</font id=gold>");
fstring = docode(fstring, "<h1>", "</h1>", "<h1>", "</h1>");
fstring = docode(fstring, "<h2>", "</h2>", "<h2>", "</h2>");
fstring = docode(fstring, "<h3>", "</h3>", "<h3>", "</h3>");
fstring = docode(fstring, "<h4>", "</h4>", "<h4>", "</h4>");
fstring = docode(fstring, "<h5>", "</h5>", "<h5>", "</h5>");
fstring = docode(fstring, "<h6>", "</h6>", "<h6>", "</h6>");
fstring = docode(fstring, "[size=1]", "[/size=1]", "<font size=1>", "</font id=size1>");
fstring = docode(fstring, "[size=2]", "[/size=2]", "<font size=2>", "</font id=size2>");
fstring = docode(fstring, "[size=3]", "[/size=3]", "<font size=3>", "</font id=size3>");
fstring = docode(fstring, "[size=4]", "[/size=4]", "<font size=4>", "</font id=size4>");
fstring = docode(fstring, "[size=5]", "[/size=5]", "<font size=5>", "</font id=size5>");
fstring = docode(fstring, "[size=6]", "[/size=6]", "<font size=6>", "</font id=size6>");
fstring = docode(fstring, "[left]", "[/left]", "<div align=left>", "</div id=left>");
fstring = docode(fstring, "<center>", "</center>", "<center>", "</center>");
fstring = docode(fstring, "<div align=right>", "</div>", "<div align=right>", "</div id=right>");
fstring = docode(fstring, "<pre class=codesamp>", "</pre>", "<pre id=code><font face=courier size=3 id=code>", "</font id=code></pre id=code>");
fstring = docode(fstring, "[url]", "[/url]", "<a>", "</a>");
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 = "<a>";
string hreftaglast = "</a>";
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( "<a>", 0) != -1){
strreturn = repstr ( strreturn , "", "<a>");
}
hreftxt = "<a href =" +strreturn + " target=\"_blank\">" + strreturn + "</a>";
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) + "<br>";
}
return makecontent;
}
public static string delbr(string content) {
string makecontent=new string();
stringtokenizer strtoken=new stringtokenizer(content,"<br>");
while(strtoken.hasmoretokens()) {
string snext = strtoken.nexttoken();
makecontent=makecontent + snext.substring(0,snext.length()-4) + "\n";
}
return makecontent;
}
}
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



