最简单的方法将URL转换为C#字符串中的超链接?

问题描述:

我正在使用Twitter API并希望将所有URL转换为超链接。最简单的方法将URL转换为C#字符串中的超链接?

你想出来做这件事最有效的方法是什么?

string myString = "This is my tweet check it out http://tinyurl.com/blah"; 

This is my tweet check it out <a href="http://tinyurl.com/blah">http://tinyurl.com/>blah</a> 
+0

对于这个应用程序,你应该寻找一种与Twitter本身解析URL完全一​​致的解决方案 - 正则表达式可能工作;只要确保使用相同的条件来匹配URL的末尾(比如点和右括号等),就像Twitter一样。 – 2010-04-18 11:17:46

正则表达式可能是你的朋友了这样的任务:

Regex r = new Regex(@"(https?://[^\s]+)"); 
myString = r.Replace(myString, "<a href=\"$1\">$1</a>"); 

的正则表达式匹配的URL可能需要一点工作。

+2

我认为这很好,正则表达式功能强大,但捕获非空白比尝试在正则表达式中实现URL解析器要好得多。我可能会把它改成`(https?:// [^] +)`因为https并不罕见。 – 2010-04-18 07:47:46

这实际上是一个丑陋的问题。 URL可以包含(并以标点符号结尾),因此可能很难确定URL实际结束的时间,以及以正常文本嵌入的时间。例如:

http://example.com/. 

是一个有效的URL,但它可以很容易地成为一个句子的结尾:

I buy all my witty T-shirts from http://example.com/. 

你不能简单地分析,直到空间被发现,因为这样你将会保留这段时间作为网址的一部分。您也不能简单地解析,直到找到一段时间或空间,因为时间段在URL中非常常见。

是的,正则表达式是你的朋友在这里,但构造适当的正则表达式是困难的部分。

看看这个:Expanding URLs with Regex in .NET

+0

这是完美的.. :) – TimLeung 2009-03-26 18:50:29

我与jquery consuming the JSON API这里这同样的事情就是linkify功能:

String.prototype.linkify = function() { 
    return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/, function(m) { 
     return m.link(m); 
    }); 
}; 

/为RedWolves

从欢呼:this.replace(/ [A-ZA-Z] + :// [A-ZA-z0-9- ] + [A-ZA-z0-9-:%& \ /.=] + /,函数(M){...

参见:[A-Za-z] +:// [A-Za-z0-9-] +。[A-Za-z0-9-:%& \ /.=] +/

还有的地址 “anyprotocol” 的代码:// “anysubdomain /域” “anydomainextension和地址”,

,这是一个完美的字符串操作的其他用法的例子。你可以根据需要随意切片和切块,并在需要时插入适当的“a href”。

我用jQuery很容易地在我的内容加载逻辑中将这些链接的属性更改为“target = _blank”,即使.link方法不允许您自定义它们。

我个人喜欢将自定义方法添加到字符串对象以供动态字符串过滤(String.prototype。linkify声明),但我不确定在一个需要组织10个自定义链接类函数的大规模环境中如何实现。我认为在那个时候你肯定会用你的代码结构做其他事情。

也许兽医会在这里绊倒并启发我们。

您可以通过使用正则表达式MatchEvaluator委托功能在此添加更多的控制: 假设我有这个字符串:

find more on http://www.*.com

现在试试这个代码

private void ModifyString() 
{ 
    string input = "find more on http://www.authorcode.com "; 
       Regex regx = new Regex(@"\b((http|https|ftp|mailto)://)?(www.)+[\w-]+(/[\w- ./?%&=]*)?"); 
       string result = regx.Replace(input, new MatchEvaluator(ReplaceURl)); 
} 

static string ReplaceURl(Match m) 
{ 
    string x = m.ToString(); 
    x = "< a href=\"" + x + "\">" + x + "</a>"; 
    return x; 
}