我从数据库中提取文本,格式如下面的示例。我想在这个文本块中的每个URL前面插入域名。
<p>We recommend you check out the article
<a id="navitem" href="/article/why-apples-new-iphones-may-delight-and-worry-it-pros/" target="_top">
Why Apple's new iPhones may delight and worry IT pros</a> to learn more</p>
因此,请注意上面的示例,我想将http://www.mydomainname.com/插入到URL中,使其显示为:
href="http://www.mydomainname.com/article/why-apples-new-iphones-may-delight-and-worry-it-pros/"
我想我可以使用正则表达式并将href =“替换为href =”http://www.mydomainname.com但这看起来并没有像我预期的那样工作。我应该尝试任何建议或更好的方法吗?
var content = Regex.Replace(DataBinder.Eval(e.Item.DataItem, "Content").ToString(),
"^href=\"$", "href=\"https://www.mydomainname.com/");
答案 0 :(得分:1)
你可以使用正则表达式......
......但这对于这项工作来说非常错误。
Uri
有一些方便的构造函数/工厂方法用于此目的:
Uri ConvertHref(Uri sourcePageUri, string href)
{
//could really just be return new Uri(sourcePageUri, href);
//but TryCreate gives more options...
Uri newAbsUri;
if (Uri.TryCreate(sourcePageUri, href, out newAbsUri))
{
return newAbsUri;
}
throw new Exception();
}
所以,说sourcePageUri
是
var sourcePageUri = new Uri("https://somehost/some/page");
我们的方法的输出,其中包含href
的几个不同值:
https://www.foo.com/woo/har => https://www.foo.com/woo/har /woo/har => https://somehost/woo/har woo/har => https://somehost/some/woo/har
...所以它与浏览器的解释相同。完美,没有?
答案 1 :(得分:0)
试试这段代码:
var content = Regex.Replace(DataBinder.Eval(e.Item.DataItem, "Content").ToString(),
"(href=[ \t]*\")\/", "$1https://www.mydomainname.com/", RegexOptions.Multiline);
答案 2 :(得分:0)
使用html解析器,如CsQuery。
var html = "your html text here";
var path = "http://www.mydomainname.com";
CQ dom = html;
CQ links = dom["a"];
foreach (var link in links)
link.SetAttribute("href", path + link["href"]);
html = dom.Html();