我要截取的字符串是html文件的内容
发送过来的内容为<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 9.00.8112.16437"></HEAD>
<BODY></BODY></HTML>这个是以字符串形式发送过来的,所以我想要截取后面的字符串到</HEAD>标记,
CString m = _T(m_strMsg_str.Right(31)); // m_strMsg_str为以上html信息 CString类型我又定义了CString kk = _T("</HEAD><BODY></BODY></HTML>");对这两个字符串进行比较,但是却不是我想要的结果if(m == kk){
..... // 这里一直不执行
}我追踪了下得到m和kk两个值都是 "</HEAD><BODY></BODY></HTML>",但是长度却不相同,m的长度是31,kk的长度是27
是因为这个m和kk才不相等的么?
怎样解决截取的字符串和自定义的字符串相比较的问题呢?
发送过来的内容为<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 9.00.8112.16437"></HEAD>
<BODY></BODY></HTML>这个是以字符串形式发送过来的,所以我想要截取后面的字符串到</HEAD>标记,
CString m = _T(m_strMsg_str.Right(31)); // m_strMsg_str为以上html信息 CString类型我又定义了CString kk = _T("</HEAD><BODY></BODY></HTML>");对这两个字符串进行比较,但是却不是我想要的结果if(m == kk){
..... // 这里一直不执行
}我追踪了下得到m和kk两个值都是 "</HEAD><BODY></BODY></HTML>",但是长度却不相同,m的长度是31,kk的长度是27
是因为这个m和kk才不相等的么?
怎样解决截取的字符串和自定义的字符串相比较的问题呢?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
<META content="text/html; charset=gb2312" http-equiv=Content-Type> 、
<META name=GENERATOR content="MSHTML 9.00.8112.16437"> 、
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
</HEAD>
<BODY></BODY></HTML>
你想取截取这一段内容吗?
CString str = m_strMsg_str.Mid(m_strMsg_str.Find(L"<HEAD>"), m_strMsg_str.Find(L"</HEAD>");
str = str.Right(str.GetLength() - 6);
或者
str = str.Mid(6, str.GetLength());
你Find("</head>")查询到位置,然后截取到,</html>不就可以了。。CString str = m_strMsg_str.Mid(m_strMsg_str.Find(L"</HEAD>"), m_strMsg_str.Find(L"</html>");
你想要从哪里到哪里,直接替换我发的那个Mid方法里面的两个特征字串就可以了。
你说的不匹配是不是因为里面有特殊字符引起的??
比如: “” / \ 这些,都需要使用转义符来表示的. \" \" \/ 等。。
</HEAD>
<BODY></BODY></HTML>的截取我会的,问题是截取后和我自定义的 CString kk = _T("</HEAD><BODY></BODY></HTML>");字符串不匹配,这个字符串里面并没有需要转义的字符啊
一般是二个办法,一是自己用正则,二是用现成的HTML解析库。
//截取字符
CString cs="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"> \
<HTML><HEAD> \
<META content=\"text/html; charset=gb2312\" http-equiv=Content-Type> \
<META name=GENERATOR content=\"MSHTML 9.00.8112.16437\"></HEAD> \
<BODY> </BODY> </HTML>"; int pos;
for ( int n = 0;(n = cs.Find(_T("</HEAD>"),n)) > 0 ;n++ )
pos = n; CString m =cs.Right(cs.GetLength() - pos);
AfxMessageBox(m);
m.Replace("\x20","");//去掉空格或其他
AfxMessageBox(m);
//然后才进行比较
感觉很麻烦啊~~~
同意你说的,但是是什么字符呢?我检查了下长度,right之后是31
和比较的字符27 有差距啊