正文

PC论坛到无线论坛的迁移之---UBB代码转换2006-09-11 17:56:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/ggbm/18472.html

分享到:

         现在我国的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, "&amp;", "&");  // fString = repstr(fString, "&nbsp;", " ");  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)); //  }  }

阅读(3502) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册