62,271
社区成员
发帖
与我相关
我的任务
分享 /// <summary>
/// 获取html代码中的图片,并修改图片地址为绝对链接
/// </summary>
/// <param name="imghtml">原来的html代码</param>
/// <param name="httpurl">要添加的网址头, 请在连接后加上斜杠如:http;//www.a.com/</param>
/// <returns>返回新的html代码</returns>
public static string ChangeImgSrc2(string imghtml, string httpurl)
{
if (string.IsNullOrEmpty(imghtml)) return "";
string pattern1 = @"<img.+?>";
string pattern = @"(<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*)(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>";//填空
//pattern = @"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>";
Regex reg = new Regex(pattern, RegexOptions.IgnoreCase);
Regex reg1 = new Regex(pattern1, RegexOptions.IgnoreCase);
MatchCollection mc = reg1.Matches(imghtml);//找到所有IMG
foreach (Match m in mc)//替换每一个img的地址
{
string img = m.Value;
string imgurl = reg.Replace(img, "$2");//取得图片地址
string pattern2 = @"^http([\s\S])*";
if (!Regex.IsMatch(imgurl, pattern2, RegexOptions.IgnoreCase))//判断图片地址是否包含http
{
if (!imgurl.StartsWith("/"))
{
imgurl = "/" + imgurl;
}
string imgurlnew = imgurl.Replace(imgurl, httpurl + imgurl);//把地址变位绝对链接
// HttpContext.Current.Response.Write(imgurlnew + "<br>");
imghtml = imghtml.Replace(imgurl, imgurlnew);//替换全部html代码,把图片地址变为绝对地址
}
}
return imghtml;
}//替换方法
public static string ChangeImgSrc2(string imghtml, string httpurl)
{
return Regex.Replace(imghtml, @"(?i)(?<=<img[^>]*?src="")(?!http://)", httpurl);
}
//调用
string test = @"有的图片可以抓取出来 有的 就不可以 我 好 纳闷啊 谁能 给我 改正下啊 谢谢谢谢谢;啊
<img height=""481"" alt=""《正午的阳光》唐跃 油画"" width=""500"" src=""/uploadfiles/images/admin/FCKeditor/2010102510334316.jpg"" /> 这个 可以匹配,
<img height=""352"" alt=""珠海市美术家协会主席古锦其先生致辞
"" src=""/uploadfiles/images/admin/FCKeditor/201010251028016.jpg"" width=""500"" /> 这个 就不能匹配 ?怎么办啊 ?";
richTextBox2.Text = ChangeImgSrc2(test, "http://www.csdn.net");
/*---------输出--------
有的图片可以抓取出来 有的 就不可以 我 好 纳闷啊 谁能 给我 改正下啊 谢谢谢谢谢;啊
<img height="481" alt="《正午的阳光》唐跃 油画" width="500" src="http://www.csdn.net/uploadfiles/images/admin/FCKeditor/2010102510334316.jpg" /> 这个 可以匹配,
<img height="352" alt="珠海市美术家协会主席古锦其先生致辞
" src="http://www.csdn.net/uploadfiles/images/admin/FCKeditor/201010251028016.jpg" width="500" /> 这个 就不能匹配 ?怎么办啊 ?
*/ string regImage = "<img\\b[^>]*\\bsrc\\s*=\\s*('|\")(?<url>([^'\"\n\r\f>]+(\\.jpg|\\.bmp|\\.gif|\\.png|\\.tif|\\.jpe|\\.jpeg|\\.ico|)))('|\")[^>]*>";
Regex reg = new Regex(regImage, RegexOptions.Compiled | RegexOptions.IgnoreCase);
Match m = reg.Match(content);
while (m.Success)
{
string value = m.Groups["url"].Value;
}