将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的函数。我认为那时候我们肯定必须对代码结构做其他事情。
也许兽医会在这里绊倒并启发我们。