我要截取的字符串是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才不相等的么?
怎样解决截取的字符串和自定义的字符串相比较的问题呢?

解决方案 »

  1.   


    <!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>");
      

  2.   

    有点小问题。没有把前面的<HEAD>去掉,,不过想去掉也简单了。
    str = str.Right(str.GetLength() - 6);  
    或者
    str = str.Mid(6, str.GetLength());
      

  3.   

    感谢回复,但是你好像没看明白我说的意思,截取字符串也不是要head之间的字符串,是要</head>到</html>之间的,另外截取的字符串和定义的字符串总是不匹配,我想知道为什么,怎么解决,谢谢
      

  4.   

    应该用HTML对应的解析类 去获取对应元素的内容;
      

  5.   

    要</head>到</html>之间的
    你Find("</head>")查询到位置,然后截取到,</html>不就可以了。。CString str = m_strMsg_str.Mid(m_strMsg_str.Find(L"</HEAD>"), m_strMsg_str.Find(L"</html>");
      

  6.   


    你想要从哪里到哪里,直接替换我发的那个Mid方法里面的两个特征字串就可以了。
    你说的不匹配是不是因为里面有特殊字符引起的??
    比如: “” / \ 这些,都需要使用转义符来表示的.  \"   \"   \/ 等。。
      

  7.   


    </HEAD>
    <BODY></BODY></HTML>的截取我会的,问题是截取后和我自定义的 CString kk = _T("</HEAD><BODY></BODY></HTML>");字符串不匹配,这个字符串里面并没有需要转义的字符啊
      

  8.   

    html文件的特殊字符如回车等与text文件不同
      

  9.   

    HTML解析是个麻烦事,因为允许标签内有空格,标签之间也可以有空格,所以字符串处理不好做。
    一般是二个办法,一是自己用正则,二是用现成的HTML解析库。
      

  10.   

    更通用些,需要先截取再去掉其他字符,然后再进行比较
    //截取字符
    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);
    //然后才进行比较
      

  11.   

    还是不可以,去掉了空格还是不匹配,看来只有使用html的解析了?
    感觉很麻烦啊~~~
      

  12.   


    同意你说的,但是是什么字符呢?我检查了下长度,right之后是31   
    和比较的字符27  有差距啊