【发布时间】:2011-12-18 05:01:55
【问题描述】:
我有一个必须从 html 代码中删除的输入字符串,因此我使用默认的 .Net 函数 .HtmlEncode() 来转义所有危险字符。
现在我正在尝试通过正则表达式将输入字符串中的 URL 替换为 HREF 锚点。
问题是,当我在调用 .HtmlEncode() 之前“链接”URL 时,锚标记会丢失,这是合乎逻辑的。但是当我在调用 .HtmlEncode() 之后进行链接时,某些 url 格式错误,因为它们包含危险字符?
这似乎是一个鸡蛋问题,应该如何解决?
例子:
输入字符串:
See http://example.com/q=1&x=2
预期结果:
See <a href="http://example.com/q=1&x=2">http://example.com/q=1&x=2</a>
先做HtmlEncode,后调用Linkify:
See <a href="http://example.com/q=1&x=2">http://example.com/q=1&x=2</a>
先做Linkify,后调用HtmlEncode:
See <a href="http://example.com/q=1&x=2">http://example.com/q=1&x=2</a>
我目前使用的解决方案是对正则表达式 (linkify) 找到的所有匹配项调用 .HtmlDecode(),但这不是 100% 万无一失的,因为理论上有效的 URL 可能包含像 &amp; 这样的模式解码,但不应该。
【问题讨论】:
-
也许包括一个简单的例子?目前尚不清楚链接过程究竟需要什么。
-
这个“linkify”正则表达式实用程序是什么?
-
@JeremyStein 就是这样一个正则表达式:codinghorror.com/blog/2008/10/the-problem-with-urls.html
-
@Joshua 该示例没有替换部分。这是一种很好的匹配方式,但不足以替换。我会发布答案...
标签: .net regex escaping html-encode linkify