正文

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));
//  }
 
}

阅读(3477) | 评论(0)


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

评论

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