在网站留言,回贴等富文本框中,为了安全起见,我们一般都不会允许用户直接录入Html标签,但为了丰富留言内容。我们会提供一些特殊的标记来代替Html标签。比如提供[p][/p]代替<p></p>,提供[a][/a]代替<a></a>等。这时候,就需要我们在接收到用户留言后,将这些特殊的标记替换成对应的Html标签。下面是本站的一个自动替换Html标签的类,供大家参考:
namespace AutoPage
{
public class OtherCs
{
public static string ReplaceHtml(string oldStr)
{
/*顺序不可变,特别是将<与>替换成"<"与" >"的一定要在其它替换前,因为如果把它放在其它替后,它就会把其它替换后的<与>也替换成"<"和" >"了。*/
newStr=newStr.Replace("<","lt;");
newStr=newStr.Replace(">","gt;");
newStr=newStr.Replace("","nbsp;");
newStr=newStr.Replace("[code]","<divclass=\"code\">");
newStr=newStr.Replace("[/code]","</div>");
newStr=newStr.Replace("[strong]","<strong>");
newStr=newStr.Replace("[/strong]","</strong>");
newStr=newStr.Replace("[p]","<p>");
newStr=newStr.Replace("[/p]","</p>");
newStr=newStr.Replace("\r\n","<br/>");
//替换[URL]标签,即<a>标签,这里就要用到正则了。
//先匹配出需要替换成a标签的全部部分。用户录入的原始值类似于:[URL href="http://www.lmwlove.com"]程序食堂[/URL]
string regstr_1 = "\\[URL\\s*href=(['\"\\s]?)[^'\"\\s]+\\1\\][^\\[\\]]+\\[/URL]";
//匹配[URL href="http://www.lmwlove.com"]程序食堂[/URL]中的http://www.lmwlove.com,即url地址
string regstr_2 = @"http://([\w-]+\.)+[\w-]+(/[\w- ./?%=]*)?";
//匹配[URL href="http://www.lmwlove.com"]程序食堂[/URL]中的程序食堂,即url中的文本
string regstr_3 = @"\]+[^\[\]]+(\[+)";
string url = string.Empty;
string urlname = string.Empty;
Regex regex = new Regex(regstr_1);
MatchCollection matchs = regex.Matches(newStr);
foreach (Match m in matchs)
{
Regex regex_1 = new Regex(regstr_2);
Match match = regex_1.Match(m.Value);
if (match.Success)
{
url = match.Value;
}
regex_1 = new Regex(regstr_3);
match = regex_1.Match(m.Value);
if (match.Success)
{
urlname = match.Value.Substring(1, match.Value.Length - 2);
}
//筛选出了链接的url与文本后,重新组织正确的<a>标签
newStr = newStr.Replace(m.Value, "<a href=\"" + url + "\" target=\"_blank\" class=\"content_href\">" + urlname + "</a>");
}
return newStr;
}
}
}
因为这个方法中用到了C#中的正规,所以要引用命名空间System.Text.RegularExpressions