现在我国的3g时代马上就要到来了,那就是意味着我们的手机和电脑完全是同出一辙了,理所当然,因特网上最聚人气的BBS将逐渐的向WAP转移。然而,如果能做到手机和电脑同时访问同样的资源,并且最大限度的减少差异,就是在电脑上能做的事情,在手机上也要能做。 最近,写了个论坛在手机上操作的东东。下面把本人认为最让人头痛的UBB处理代码和大家分享,希望大家提意见。。。 /** * @author 李国庆 * @company leemenz (C) copyright * @time 2006-9-11 11:36:18 * @version 1.0.0.0 * @package com.sqlmanage */package com.sqlmanage; import java.util.Vector; /** * @author Administrator * *//** * * 这个类提供实现对UBB代码的处理 * @author 李国庆 * @version 2006-08-19 * */ public class UBB { /** * 把一个帖子的内容转换成一个字符串数组,以便于分页显示。 根据length确定数组里每个字符串大约是多少个字符。 * 以一行为完整单位进行截取,避免将一行内容截取后分别放入两个字符串。 如果根据字数截取到 * 的某个字符串包含了某一行的部分内容,则把该行其余内容也截取到该字符串。 根据"<br/>"符号来判断行。 * * @param content * 帖子内容 * @param length * 用来规定字符串数组里每个字符串大约的字符数 * @return 字符串数组。 */ public static String[] contentToArray(String content, int length) { StringBuffer sb = new StringBuffer(content); Vector v = new Vector(); int index = 0; // 用来定位"<br"字符串的位置 while (sb.length() > 0) { if (sb.length() <= length) { v.addElement(sb.toString()); break; // }else{ // v.addElement(sb.substring(0,length)); // sb.delete(0,length); } index = sb.indexOf("<br", length - 1); // 找到第length个字符后第一个"<br"符号的位置 if (index < 0) { v.addElement(sb.toString()); break; } else { v.addElement(sb.substring(0, index)); sb.delete(0, index); } } // end while String[] contents = new String[v.size()]; for (int i = 0; i < contents.length; i++) { contents[i] = (String) v.get(i); contents[i] = contents[i].replaceAll("<BR>", "<br/>"); } return contents; } // UBB代码的处理 public static String ChkString(String fString) { fString = FormatWapStr(fString); fString = fString.replaceAll(".JPG", ".jpg"); fString = fString.replaceAll(".GIF", ".gif"); fString = fString.replaceAll(".PNG", ".png"); fString = dealOther2Ubb(fString, "[upload=bmp]", "[/upload]"); fString = dealOther2Ubb(fString, "[IMG]", ".bmp[/IMG]"); fString = dealOther2Ubb(fString, "[IMG]", ".BMP[/IMG]"); fString = doCode(fString, "[img]", "[/img]", "[IMG]", "[/IMG]"); fString = doCode(fString, "[b]", "[/b]", "[B]", "[/B]"); fString = doCode(fString, "[B]", "[/B]", "", ""); fString = doCode(fString, "[u]", "[/u]", "[U]", "[/U]"); fString = doCode(fString, "[U]", "[/U]", "", ""); fString = doCode(fString, "[i]", "[/i]", "[I]", "[/I]"); fString = doCode(fString, "[I]", "[/I]", "", ""); fString = doCode(fString, "[QUOTE]", "[/QUOTE]", "", ""); fString = doCode(fString, "[quote]", "[/quote]", "", ""); fString = doCode(fString, "[fly]", "[/fly]", "", ""); fString = doCode(fString, "[move]", "[/move]", "", ""); fString = dealOtherUbb(fString, "[face", "]"); fString = dealOtherUbb(fString, "[align", "]"); fString = dealOtherUbb(fString, "[color", "]"); fString = dealOtherUbb(fString, "[glow", "]"); fString = dealOtherUbb(fString, "[em", "]"); fString = dealOther2Ubb(fString, "[newem", "]"); fString = dealOther2Ubb(fString, "[URL", "[/URL]"); fString = dealOther2Ubb(fString, "[EMAIL]", "[/EMAIL]"); fString = dealOther2Ubb(fString, "[flash", "[/flash]"); fString = dealOther2Ubb(fString, "[dir", "[/dir]"); fString = dealOther2Ubb(fString, "[newem", "[/dir]"); fString = dealOther2Ubb(fString, "[rm", "[/rm]"); fString = dealOther2Ubb(fString, "[mp", "[/mp]"); fString = dealOther2Ubb(fString, "[qt", "[/qt]"); fString = dealOther2Ubb(fString, "[SOUND]", "[/SOUND]"); fString = repstr(fString, "", "[/face]"); fString = repstr(fString, "", "[/color]"); fString = repstr(fString, "", "[/glow]"); fString = repstr(fString, "", "[/align]"); fString = doCode(fString, "[size=2]", "[/size]", "", ""); fString = doCode(fString, "[size=3]", "[/size]", "", ""); fString = doCode(fString, "[size=4]", "[/size]", "", ""); fString = doCode(fString, "[center]", "[/center]", "", ""); fString = doUploadUBB(fString,"[upload=gif]","[/upload]"); fString = doUploadUBB(fString,"[upload=jpg]","[/upload]"); return (fString); } // 转换函数 private 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); } // 字符串取替换 private static String repstr(String str, String strDen, String strSrc) { 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); } // 屏蔽wml代码,并处理回车和换行 private static String FormatWapStr(String fString) { fString = repstr(fString, "&", "&"); // fString = repstr(fString, " ", " "); fString = fString.replaceAll("<", ""); fString = fString.replaceAll(">", ""); fString = fString.replaceAll("<br>", ""); fString = fString.replaceAll("</br>", ""); fString = repstr(fString, "<br/>", "\r\n"); return (fString); } // 对其他UBB进行处理 private static String dealOtherUbb(String str, String TagPre, String TagLast) { String hrefTagPre = TagPre; String hrefTagLast = TagLast; String strReturn = ""; int iSearchedFrom = 0; int first = 0; int last = 0; while ((iSearchedFrom = str.indexOf(hrefTagPre, iSearchedFrom)) != -1) { first = iSearchedFrom; if ((iSearchedFrom = str.indexOf(hrefTagLast, iSearchedFrom)) != -1) { last = iSearchedFrom + 1; strReturn = str.substring(first, last); str = repstr(str, "", strReturn); } else break; } return (str); } // 对其他UBB(不同于上面的方法)进行处理 private static String dealOther2Ubb(String str, String TagPre, String TagLast) { String hrefTagPre = TagPre; String hrefTagLast = TagLast; String strReturn = ""; int iSearchedFrom = 0; int first = 0; int last = 0; while ((iSearchedFrom = str.indexOf(hrefTagPre, iSearchedFrom)) != -1) { first = iSearchedFrom; if ((iSearchedFrom = str.indexOf(hrefTagLast, iSearchedFrom)) != -1) { last = iSearchedFrom; iSearchedFrom += TagLast.length(); strReturn = str.substring(first, last); strReturn = str.substring(first, iSearchedFrom); str = repstr(str, "", strReturn); iSearchedFrom = 0; } else break; } return (str); } // 根据一个图片文件的URL,得到对应的小图文件的URL public static String getSmallFileURL(String url) { String s = null; int sign = url.lastIndexOf("/"); s = url.substring(0, sign + 1) + "small" + url.substring(sign + 1); return s; } // ------------------------------------------------------------------------------ // MySql中不能识别的特殊字符处理 public static String featureStrDeal(String str) { char pk = 58865; str = str.replace(pk, '\n'); return str; } /** * 根据时间戳得到日期。时间戳的格式:"2005-06-11 12:00:00.0"或者"2005-06-11 12:00:00" * * @param timestamp * 时间戳 * @return 日期字符串。比如:"2005-06-11"。如果传入的参数格式不对,则将其原样返回 */ public static String getDate(String timestamp) { timestamp = timestamp.trim(); int index = timestamp.indexOf(' '); // 找到第一个空格的位置 if (index <= 0) { return timestamp; } String date = timestamp.substring(0, index); return date; } public static String doUploadUBB(String str, String TagPre, String TagLast){ String hrefTagPre = TagPre; String hrefTagLast = TagLast; String strReturn = ""; String result = str; int iSearchedFrom = 0; int first = 0; int last = 0; while ((iSearchedFrom = str.indexOf(hrefTagPre, iSearchedFrom)) != -1) { first = iSearchedFrom; if ((iSearchedFrom = str.indexOf(hrefTagLast, iSearchedFrom)) != -1) { last = iSearchedFrom + 1; strReturn = str.substring(first, last+8); String url = str.substring(first+12,last-1); result = result.replace(strReturn,"<a href='http://www.motong.net/sendMms.jsp?URL="+url+"' target='_blank' ><IMG SRC='"+url+"' ALT='单击图片发送到手机'/></a>"); } else break; } return result; } // public static void main(String[] args) { // String s = "[color=#9932CC][B]我也来热闹热闹[/B][/color][quote][b]以下是引用[i]管理员在2006-8-31 13:31:00[/i]的发言:[/b]眼神太好,已经找出,留给后面的朋友。[/quote][color=#FF69B4][B]还是马桶你来吧.......[newem2.21][newem2.14][/B][/color][upload=gif]http://img.hnol.net/img/2004-09-5/18/2004951828591070.gif[/upload]fdgdfgdfgdf[upload=gif]http://img.hnol.net/img/2004-09-5/18/2004951828594758678.gif[/upload]";// System.out.println("result is :"+ChkString(s)); // } }

评论