一、存在的问题
我有一个数据库,为不同终端,不同域名提供数据,最近发现一个问题,就是富文本中的图片全部用的是相对路径,在正确服务器端能显示图片,但是在有些终端就不能显示图片。
二、解决方案
我想到的一个办法就是把相对路径转换成绝对路径,如果一个数据一个数据的修改,会很麻烦,将来一旦域名发生变化,这些图片依然会打不开。所以我决定用正则表达式查找所有图片数据,并把其转换成绝对路径,这一步要从服务器端发生,而不是修改数据库中的数据,只是在展示给用户前完成这一步。
例如:数据库端的富文本中的图片路径为“/upload/202305/26/202305261514197030.jpg”;路径修改为“http://www.yuanziyu.com/upload/202305/26/202305261514197030.jpg”
三、具体代码
string oldTxt = @"";//需要替换的数据
Regex regImg = new Regex(@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase);
// 搜索匹配的字符串
MatchCollection matches = regImg.Matches(oldTxt);
// 取得匹配项列表
foreach (Match match in matches)
{
var urlpic = match.Groups["imgUrl"].Value;
//UrlList[i++] = match.Groups["imgUrl"].Value;
oldTxt = oldTxt.Replace(urlpic, "http://www.yuanziyu.com" + urlpic);
}