/************************************************************************
* 功能: 把URL转换成绝对URL
* 输入参数:strUrl 要转换的URL
strWebUrl 当前网页的URL,它是绝对地址
* 输出参数:strUrl 转换过后的URL,若为空则转化失败
* 返回值: 无
************************************************************************/
void Common::ChangUrl(CString &strUrl, const CString &strWebUrl)
{
if (strUrl.IsEmpty())
{
return;
}
strUrl.MakeLower();
if (strUrl.Find(_T("http://")) == 0)
{
return;
}
if (strUrl == _T("#"))
{
strUrl = strWebUrl;
return;
}
TCHAR TchTmp = strUrl[0];
if (TchTmp == _T('/'))
{//相对地址格式如:/a/b.html的,其绝对地址为:主域名+相对地址的路径
//从参考URL中提取主域名
int nIndex = strWebUrl.Find(_T("http://"));
if (nIndex == -1)
{
strUrl.Empty();
return;
}
nIndex += 8;
nIndex = strWebUrl.Find(_T('/'), nIndex);
CString strDiamon;
if (nIndex == -1)
{
strDiamon = strWebUrl;
}
else
{
strDiamon = strWebUrl.Left(nIndex);
}
strUrl = strDiamon + strUrl;
return;
}
else
{//相对地址格式如:a/b.html,其绝对地址为:当前目录+相对地址路径
CString strCurPath(strWebUrl);
strCurPath.MakeLower();
int nLength = strCurPath.GetLength();
if (strCurPath[nLength - 1] == _T('/'))
{
strCurPath.Delete(nLength - 1);
}
//从参考URL中提取主域名
int nIndex = strWebUrl.Find(_T("http://"));
if (nIndex == -1)
{
strUrl.Empty();
return;
}
nIndex += 8;
nIndex = strWebUrl.Find(_T('/'), nIndex);
CString strDiamon;
if (nIndex == -1)
{
strDiamon = strWebUrl;
}
else
{
strDiamon = strWebUrl.Left(nIndex);
}
if (strDiamon == strCurPath)
{
if (strUrl.Left(3) == _T("../"))
{
strUrl.Empty();
}
else
{
strUrl = strCurPath + _T('/') + strUrl;
}
return;
}
nIndex = strCurPath.ReverseFind(_T('/'));
if (nIndex == -1)
{
strUrl.Empty();
return;
}
CString strFile(strCurPath.Mid(nIndex + 1));
if (strFile.Find(_T('.')) != -1)
{
strCurPath = strCurPath.Left(nIndex);
}
//相对地址格式如:../a/b.html的
int nStart = -1;
do
{
nStart = strUrl.Find(_T("../"));
if (nStart == 0)
{
strUrl.Delete(0, 3);
}
else
{
break;
}
nIndex = strCurPath.ReverseFind(_T('/'));
if (nIndex != -1)
{
if (strDiamon == strCurPath && nStart == 0)
{
strUrl.Empty();
return;
}
strCurPath = strCurPath.Left(nIndex);
}
} while (nStart == 0);
strUrl = strCurPath + _T('/') + strUrl;
return;
}
}
把URL转换成绝对URL
最新推荐文章于 2022-10-16 20:56:46 发布