【问题标题】:Regular expression convert url to hyperlink正则表达式将url转换为超链接
【发布时间】:2010-07-17 12:50:41
【问题描述】:

我搜索了一些使用 bbcode 将 url 转换为超链接的代码代码是:

// format the url tags: [url=www.website.com]my site[/url]
// becomes: <a href="www.website.com">my site</a>
exp = new Regex(@"\[url\=([^\]]+)\]([^\]]+)\[/url\]");
str = exp.Replace(str, "<a href=\"$1\">$2</a>");

// format the img tags: [img]www.website.com/img/image.jpeg[/img]
// becomes: <img src="www.website.com/img/image.jpeg" />
exp = new Regex(@"\[img\]([^\]]+)\[/img\]");
str = exp.Replace(str, "$1\" />");

我也想将普通链接转换成超链接。我又google了一些,得到了这个:

exp = new Regex("(http://[^ ]+)");
str = exp.Replace(str, "<a href=\"$1\">$1</a>");

问题是,当我混合它们并执行第三个正则表达式时,前两个会搞砸。因为它可能导致:

<img src="<a href='www.website.com/img/image.jpeg>www.website.com/img/image.jpeg</a>" />

如何在我的第三个正则表达式中指定他不能转换以 'href="' 或 'src="' 开头的字符串?

【问题讨论】:

标签: c# .net regex bbcode


【解决方案1】:

鉴于用户可能会向您抛出有趣的标签组合,正则表达式很快就会变得繁琐且难以用于解析标签。

BBCode 本身就是一种语法,以编程方式解释语法的最佳方式是使用实际的解析器。

看看http://bbcode.codeplex.com/。我不能保证它的有效性,但他们已经在 C# 中实现了一个 BBCode 解析器,它可能会满足您的需求。

【讨论】:

  • 基本的正则表达式也没有足够的业务逻辑来保护你免受狡猾的用户的攻击。用户很容易做类似 [url]javascript:window.alert("lolol")[/url] 或 [img] path.to/a/script.php [/img] 之类的事情,并造成各种破坏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
相关资源
最近更新 更多