【问题标题】:When parsing HTML, random characters are added to the string?解析HTML时,随机字符被添加到字符串中?
【发布时间】:2011-11-26 13:42:09
【问题描述】:

我正在解析 HTML 页面的表格,但是当我显示数据时,添加了随机字符,如下例所示:

Preowiveding 但应该是Preding

我不知道这是否是防止人们解析数据的安全功能。
这很奇怪,因为有时文本显示正确,而另一个文本显示错误......

我从中获取数据的页面是this 这里的一个。 表格的 HTML 代码看起来有点奇怪:

<a target='_blank' href='#' class='draggableVerein' >&#76;<span style='display:none;'>&#105;<span style='display:none;'>&#115;&#105;&#118;&#98;&#97;</span><u></u>&#118;&#98;&#97;&#111;</span><u></u>&#105;&#101;&#98;&#101;&#110;&#97;&#117;</a>

在文本之间有spanu 标记,它们在浏览器中似乎什么都不做,但在解析时会产生此错误。

我使用 Ben Reeves HTML Parser。 示例:

HTMLNode *node = [rowNode findChildWithAttribute:@"class" matchingName:@"rang" allowPartial:TRUE];
team.rang = [node allContents];

编辑:

现在我用 HPPLE 尝试了 libXML2:

NSArray *elements  = [xpathParser searchWithXPathQuery:@"//table[2]/tr[5]/td/a"];
// Access the first cell
TFHppleElement *element = [elements objectAtIndex:0];

NSString *content = [element content];  
NSLog(@"content: %@",content);

输出是ersdorf而不是Eggersdorf。 本示例的 HTML:

<a target='_blank' href='/datenservice/portal/verein/aktuelles.ds?vereinsNr=8070&sektionsId=485215725|665233118344931246&awVerband=ST_' class='draggableVerein' drag_img='/netzwerk/imagedownload/379402779304830775_383470150383145150-60-60-EfcSAtkX.jpg'>&#69;&#103;&#103;&#101;&#114;&#115;&#100;&#111;&#114;&#102;</a>

这是一个非常奇怪的代码。
有什么建议吗?

【问题讨论】:

  • 您是否尝试过使用libxml2,如果问题仍然存在?

标签: objective-c html-parsing


【解决方案1】:

这里似乎发生了两件事。

  1. 它使用 HTML 字符实体来指定常用字符(即 &amp;#76; 而不是 L)。这可能是一种混淆的尝试。
  2. 它使用&lt;span style='display:none'&gt;...&lt;/span&gt; 告诉浏览器不要显示某些文本。这可能是试图在文本中引入看不见的垃圾。浏览器不会显示它,但 HTML 解析器仍会输出该文本。

如果您想丢弃垃圾文本,您的代码必须处理 &lt;span> 和 &lt;/span&gt; 标签并自动丢弃样式设置为 display:none 的任何文本。

注意:您链接到的页面的来源有版权声明(德语)。 IANAL,但您可能需要翻译和律师来确保您不会通过抓取页面来违反他们的服务条款。

【讨论】:

    【解决方案2】:

    编辑: 我的最后一个建议很愚蠢。

    您可以在此处使用 stringByUnescapingHTML 方法:http://code.google.com/p/statz/source/browse/trunk/NSString%2BHTML.m 对其进行解码。 工作代码:

    NSString *myStr = [[NSString alloc] initWithString:@"&#69;&#103;&#103;&#101;&#114;&#115;&#100;&#111;&#114;&#102;"];
    NSArray* components = [myStr componentsSeparatedByString:@";"];
    myStr = @"";
    int value;
    for (NSString *comp in components){
        unsigned length = [comp length];
        if (length != 0) {
        NSString *numberSequence = [comp substringWithRange:NSMakeRange(2, length - 2)];
        NSScanner *scanner = [NSScanner scannerWithString:numberSequence];
        if ([scanner scanInt: &value] && 
            value < USHRT_MAX &&
            value > 0){
            unichar uchar = value;
            NSString *charString = [NSString stringWithCharacters:&uchar length:1];
            [myStr stringByAppendingString:charString];
        }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 2022-06-10
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多