UBB(c#完整版)
http://www.cnblogs.com/yvesliao/articles/880738.html
UBB代码是论坛里经常使用的一种替代html代码的代码,用它自然要比html安全。
比如技术能养活自己多久?找到了处理UBB代码的类,放在这里供大家下载。
原地址那里粘贴代码后要替换好多不规则的字符。
using System;
using System.Text;
using System.Text.RegularExpressions;
namespace myluntan
{
/**//// <summary>
/// UBB 的摘要说明。
/// </summary>
public class UBB
{
public UBB()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
公共静态方法#region 公共静态方法
/**//// <summary>
/// UBB代码处理函数
/// </summary>
/// <param name="sDetail">输入字符串</param>
/// <returns>输出字符串</returns>
public string UBBToHTML(string sDetail)
{
Regex r;
Match m;
处理空格#region 处理空格
sDetail = sDetail.Replace(" ", " ");
#endregion
处理单引号#region 处理单引号
sDetail = sDetail.Replace("'", "’");
#endregion
处理双引号#region 处理双引号
sDetail = sDetail.Replace("/"", """);
#endregion
html标记符#region html标记符
sDetail = sDetail.Replace("<", "<");
sDetail = sDetail.Replace(">", ">");
#endregion
处理换行#region 处理换行
//处理换行,在每个新行的前面添加两个全角空格
r = new Regex(@"(/r/n(( )| )+)(?<正文>/S+)", RegexOptions.IgnoreCase);
for (m = r.Match(sDetail); m.Success; m = m.NextMatch())
{
sDetail = sDetail.Replace(m.Groups[0].ToString(), "<BR> " + m.Groups["正文"].ToString());
}
//处理换行,在每个新行的前面添加两个全角空格
sDetail = sDetail.Replace("/r/n", "<BR>");
#endregion
处[b][/b]标记#region 处[b][/b]标记
r = new Regex(@"(/[b/])([ /S/t]*?)(/[//b/])", RegexOptions.IgnoreCase);
for (m = r.Match(sDetail); m.Success; m = m.NextMatch())
{
sDetail = sDetail.Replace(m.Groups[0].ToString(), "<B>" + m.Groups[2].ToString() + "</B>");
}
#endregion
处[i][/i]标记#region 处[i][/i]标记
r = new Regex(@"(/[i/])([ /S/t]*?)(/[//i/])", RegexOptions.IgnoreCase);
for (m = r.Match(sDetail); m.Success; m = m.NextMatch())
{
sDetail = sDetail.Replace(m.Groups[0].ToString(), "<I>" + m.Groups[2].ToString() + "</I>");
}
#endregion
处[u][/u]标记#region 处[u][/u]标记
r = new Regex(@"(/[U/])([ /S/t]*?)(/[//U/])", RegexOptions.IgnoreCase);
for (m = r.Match(sDetail); m.Success; m = m.NextMatch())
{
sDetail = sDetail.Replace(m.Groups[0].ToString(), "<U>" + m.Groups[2].ToString() + "</U>");
}
#endregion
处[p][/p]标记#region 处[p][/p]标记
//处[p][/p]标记
r = new Regex(@"((/r/n)*/[p/])(.*?)((/r/n)*/[//p/])", RegexOptions.IgnoreCase | RegexOptions.Singleline);
for (m = r.Match(sDetail); m.Success; m = m.NextMatch())
{
sDetail = sDetail.Replace(m.Groups[0].ToString(), "<P class=/"pstyle/">" + m.Groups[3].ToString() + "</P>");
}
#endregion
处[sup][/sup]标记#region 处[sup][/sup]标记
//处[sup][/sup]标记
r = new Regex(@"(/[sup/])([ /S/t]*?)(/[//sup/])", RegexOptions.IgnoreCase);
for (m = r.Match(sDetail); m.Success; m = m.NextMatch())
{
sDetail = sDetail.Replace(m.Groups[0].ToString(), "<SUP>" + m.Groups[2].ToString() + "</SUP>");
}
#endregion
处[sub][/sub]标记#region 处[sub][/sub]标记
//处[sub][/sub]标记
r = new Regex(@"(/[sub/])([ /S/t]*?)(/[//sub/])", RegexOptions.IgnoreCase);
for (m = r.Match(sDetail); m.Success; m = m.NextMatch())
{
sDetail = sDetail.Replace(m.Groups[0].ToString(), "<SUB>" + m.Groups[2].ToString() + "</SUB>");
}
using System.Text;
using System.Text.RegularExpressions;
namespace myluntan
{
/**//// <summary>
/// UBB 的摘要说明。
/// </summary>
public class UBB
{
public UBB()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
公共静态方法#region 公共静态方法
/**//// <summary>
/// UBB代码处理函数
/// </summary>
/// <param name="sDetail">输入字符串</param>
/// <returns>输出字符串</returns>
public string UBBToHTML(string sDetail)
{
Regex r;
Match m;
处理空格#region 处理空格
sDetail = sDetail.Replace(" ", " ");
#endregion
处理单引号#region 处理单引号
sDetail = sDetail.Replace("'", "’");
#endregion
处理双引号#region 处理双引号
sDetail = sDetail.Replace("/"", """);
#endregion
html标记符#region html标记符
sDetail = sDetail.Replace("<", "<");
sDetail = sDetail.Replace(">", ">");
#endregion
处理换行#region 处理换行
//处理换行,在每个新行的前面添加两个全角空格
r = new Regex(@"(/r/n(( )| )+)(?<正文>/S+)", RegexOptions.IgnoreCase);
for (m = r.Match(sDetail); m.Success; m = m.NextMatch())
{
sDetail = sDetail.Replace(m.Groups[0].ToString(), "<BR> " + m.Groups["正文"].ToString());
}
//处理换行,在每个新行的前面添加两个全角空格
sDetail = sDetail.Replace("/r/n", "<BR>");
#endregion
处[b][/b]标记#region 处[b][/b]标记
r = new Regex(@"(/[b/])([ /S/t]*?)(/[//b/])", RegexOptions.IgnoreCase);
for (m = r.Match(sDetail); m.Success; m = m.NextMatch())
{
sDetail = sDetail.Replace(m.Groups[0].ToString(), "<B>" + m.Groups[2].ToString() + "</B>");
}
#endregion
处[i][/i]标记#region 处[i][/i]标记
r = new Regex(@"(/[i/])([ /S/t]*?)(/[//i/])", RegexOptions.IgnoreCase);
for (m = r.Match(sDetail); m.Success; m = m.NextMatch())
{
sDetail = sDetail.Replace(m.Groups[0].ToString(), "<I>" + m.Groups[2].ToString() + "</I>");
}
#endregion
处[u][/u]标记#region 处[u][/u]标记
r = new Regex(@"(/[U/])([ /S/t]*?)(/[//U/])", RegexOptions.IgnoreCase);
for (m = r.Match(sDetail); m.Success; m = m.NextMatch())
{
sDetail = sDetail.Replace(m.Groups[0].ToString(), "<U>" + m.Groups[2].ToString() + "</U>");
}
#endregion
处[p][/p]标记#region 处[p][/p]标记
//处[p][/p]标记
r = new Regex(@"((/r/n)*/[p/])(.*?)((/r/n)*/[//p/])", RegexOptions.IgnoreCase | RegexOptions.Singleline);
for (m = r.Match(sDetail); m.Success; m = m.NextMatch())
{
sDetail = sDetail.Replace(m.Groups[0].ToString(), "<P class=/"pstyle/">" + m.Groups[3].ToString() + "</P>");
}
#endregion
处[sup][/sup]标记#region 处[sup][/sup]标记
//处[sup][/sup]标记
r = new Regex(@"(/[sup/])([ /S/t]*?)(/[//sup/])", RegexOptions.IgnoreCase);
for (m = r.Match(sDetail); m.Success; m = m.NextMatch())
{
sDetail = sDetail.Replace(m.Groups[0].ToString(), "<SUP>" + m.Groups[2].ToString() + "</SUP>");
}
#endregion
处[sub][/sub]标记#region 处[sub][/sub]标记
//处[sub][/sub]标记
r = new Regex(@"(/[sub/])([ /S/t]*?)(/[//sub/])", RegexOptions.IgnoreCase);
for (m = r.Match(sDetail); m.Success; m = m.NextMatch())
{
sDetail = sDetail.Replace(m.Groups[0].ToString(), "<SUB>" + m.Groups[2].ToString() + "</SUB>");
}