将 URL 转换为 C# 字符串中的超链接的最简单方法?
题
我正在使用 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=\"$1\">$1</a>");
匹配 URL 的正则表达式可能需要一些工作。
其他提示
我做了同样的事情 jquery 使用 JSON API 这是链接函数:
String.prototype.linkify = function() {
return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/, function(m) {
return m.link(m);
});
};
这实际上是一个丑陋的问题。URL 可以包含标点符号(并以标点符号结尾),因此当 URL 嵌入到普通文本中时,很难确定 URL 的实际结束位置。例如:
http://example.com/.
是一个有效的 URL,但它也可以很容易地作为句子的结尾:
I buy all my witty T-shirts from http://example.com/.
在找到空格之前,您不能简单地进行解析,因为这样您就会将句点保留为 URL 的一部分。您也不能简单地解析直到找到句点或空格,因为句点在 URL 中非常常见。
是的,正则表达式是你的朋友,但构建适当的正则表达式是困难的部分。
也看看这个: 在 .NET 中使用正则表达式扩展 URL.
您可以通过使用 MatchEvaluator 委托函数和正则表达式来添加更多控制:假设我有这个字符串:
find more on http://www.stackoverflow.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;
}
/为红狼队加油
从: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/domain”。“anydomainextension 和地址”,
它是字符串操作其他用途的完美示例。您可以使用 .replace 随意切片和切块,并在需要时插入适当的“a href”。
我在内容加载逻辑中使用 jQuery 将这些链接的属性轻松更改为“target=_blank”,即使 .link 方法不允许您自定义它们。
我个人喜欢在字符串对象上添加一个自定义方法,以进行动态字符串过滤(String.prototype.linkify 声明),但我不确定这在大型环境中会如何发挥作用。必须组织 10 多个类似 linkify 的自定义函数。我认为此时您肯定需要对代码结构做其他事情。
也许兽医会在这里偶然发现并启发我们。