【问题标题】:Asp.net C# Replacing all the urls of a string with an "a href" linkAsp.net C#用“a href”链接替换字符串的所有url
【发布时间】:2011-10-27 02:34:53
【问题描述】:

我目前在 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 来实现这一点?

提前发送。

【问题讨论】:

  • 样本会有所帮助。可能您需要使用文字控件来显示字符串以将其解释为 HTML
  • 我不确定我是否完全理解这个问题;所以你在页面某处的标签中有一个字符串,其中包含需要用 javascript 转换的 URL 列表?如果你能举一个简单的例子来说明你的意思,那将非常有帮助。
  • 我修改了答案:)

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


【解决方案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,这些 URL 已正确替换为在新浏览器窗口中打开的链接。

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

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

【讨论】:

  • 它有效,但并非完全有效。它不适用于带有“-”或 ?ID=1988& 以及其他一些情况的 url。我已经用过滤所有这些正则表达式过滤器的可能方法更新了我的答案,有什么想法吗?
  • 尝试使用这个正则表达式:https?://[^\s]* http 后跟可选的 s 后跟 :// 后跟任何现在是空格的内容
【解决方案2】:
猜你喜欢
  • 2013-01-12
  • 2017-04-14
  • 2021-03-19
  • 1970-01-01
  • 2023-03-27
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多