Asp.net C#用“a href”链接替换字符串的所有url

时间:2011-08-15 07:08:59

标签: c# javascript jquery asp.net asp.net-mvc-3

我目前正在 pre 标签内显示一个字符串的内容,但是我必须详细说明一个函数,对于每个链接进入字符串用链接标签替换它,我尝试了几个字符串替换和正则表达式方法,但没有人工作。

string myString = "Bla bla bla bla http://www.site.com and bla bla http://site2.com blabla"
//Logic
string outputString = "Bla bla bla bla <a href="http://www.site.com" target="blank">http://www.site.com</a> and bla bla <a href="http://site2.com" target="blank">http://site2.com</a> blabla"

我使用了以下代码,但它并不适用于每个网址:

string orderedString = item.Details.Replace("|", "\n" );
string orderedStringWithUrl = "";

System.Text.RegularExpressions.Regex regx = new System.Text.RegularExpressions.Regex("http://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&amp;\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?", System.Text.RegularExpressions.RegexOptions.IgnoreCase);

System.Text.RegularExpressions.MatchCollection mactches = regx.Matches(orderedString);

foreach (System.Text.RegularExpressions.Match match in mactches)
{
    orderedStringWithUrl = orderedString.Replace(match.Value, "<a href='" + match.Value + "' target='blank'>" + match.Value + "</a>");
}

有什么建议吗?

更新: 我注意到我在字符串中的URL都没有空格,所有都以http或https开头。 这是一个想法,一个以http或https开头到(并且不包括在第一个空间)的所有内容?在那种情况下,我如何使用.replace来实现这一目标?

提前Tnx。

2 个答案:

答案 0 :(得分:1)

在我使用此标记的示例中

<body>
    <form id="form1" runat="server">
    <div>
      <asp:Literal ID="litTextWithLinks" runat="server" />
    </div>
    </form>
</body>

以及代码隐藏

private const string INPUT_STRING = "Bla bla bla bla http://www.site.com and bla bla http://site2.com blabla";

protected void Page_Load ( object sender, EventArgs e ) {
  var outputString = INPUT_STRING;

  Regex regx = new Regex( @"https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?", RegexOptions.IgnoreCase );

  MatchCollection mactches = regx.Matches( INPUT_STRING );
  foreach ( Match match in mactches ) {
    outputString = outputString.Replace( match.Value, String.Format( "<a href=\"{0}\" target=\"_blank\">{0}</a>", match.Value ) );
  }

  litTextWithLinks.Text = outputString;
}

对于样本中所有正确替换为在新浏览器窗口中打开的链接的URL。

您可以通过执行WebRequest来测试URL,只有在打开成功时才进行替换。如果并非所有网址都匹配,那么您可能需要更改正则表达式。

如果这不能回答您的问题,您应该添加更多细节。

答案 1 :(得分:0)