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

时间:2020-03-05 18:44:29  来源:igfitidea点击:

我正在使用Twitter API,并希望将所有URL转换为超链接。

我们想出的最有效方法是什么?

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>

解决方案

回答

正则表达式可能是我们完成此类任务的朋友:

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

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

回答

这实际上是一个丑陋的问题。 URL可以包含(并以)结尾的标点符号,因此,当将URL嵌入普通文本时,很难确定URL的实际终止位置。例如:

http://example.com/.

是有效的网址,但很容易成为句子的结尾:

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

在找到空格之前,我们不能简单地进行分析,因为那样我们会将句点保留为URL的一部分。在找到句点或者空格之前,我们也不能简单地进行解析,因为句点在URL中极为常见。

是的,正则表达式是朋友,但是构建适当的正则表达式是困难的部分。

也请检查以下内容:在.NET中使用Regex扩展URL。

回答

我使用消耗JSON API的jquery做了同样的事情,这里是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);
    });
 };

回答

/为红狼欢呼

from: this.replace(/[A-Za-z]+://[A-Za-z0-9-]+.[A-Za-z0-9-:%&\?/.=]+/, function(m){...
  
  see: /[A-Za-z]+://[A-Za-z0-9-]+.[A-Za-z0-9-:%&\?/.=]+/

地址为" anyprotocol"://" anysubdomain / domain"的代码。" anydomain扩展名和地址",

这是字符串处理的其他用途的完美示例。我们可以使用.replace随意切片和切块,并在需要的地方插入适当的" a href"。

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

我个人喜欢对字符串对象使用自定义方法以进行动态字符串过滤(String.prototype.linkify声明),但是我不确定在大型环境中如何实现这种效果必须组织10多个自定义的类似linkify的函数。我认为那时候我们肯定必须对代码结构做其他事情。

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