检查domnodelist是否->;项目(x)->;nodeValue==“;nbsp&”;


Check if domnodelist->item(x)->nodeValue == "nbsp;"

我已经登录,并使用CURL获取返回页,用DOMDocument加载它,然后用DOMXPATH查询它(以找到'table.essgrid-tr')。(然后我也在查询结果以查找子"td",并且)根据结果,results->item(2)->nodeValue要么是日期,要么在浏览器中回声为 。我需要检查它是非中断空格还是实际文本。

希望这对下面的代码有一定的意义。

$dom = new DOMDocument();
$dom->loadHTML($result);
$xpath = new DOMXPATH($dom);
$result = $xpath->query('//table[@class="essgrid"]//tr');
if($result->length > 0) {
    foreach($result as $item) {
        $tds = $item->getElementsByTagName('td');
        if($tds->length) {
            if($tds->item(2)->nodeValue != " " && $tds->item(2)->nodeValue != " ") {
                echo = '<div>not blank:</div>';
                echo = '<div>'.$tds->item(2)->nodeValue.'</div>';
            }
        }
    }
}

所以我希望它只回显"table.essgrid>tr>td",它的值不是一个不间断的空格,但它只是回显到页面上:

<div>not blank:</div>
<div>&nbsp;</div>
<div>not blank:</div>
<div>&nbsp;</div>
<div>not blank:</div>
<div>13:00</div>
<div>not blank:</div>
<div>&nbsp;</div>
<div>not blank:</div>
<div>14:30</div>
<div>not blank:</div>
<div>13:00</div>
<div>not blank:</div>
<div>&nbsp;</div>

但它呼应了所有的结果,而不仅仅是有时间的结果。所以我认为我的问题是检查值==nodeValue,但我在它的位置上尝试的似乎都不起作用。

当您想将&nbsp;&nbsp;进行比较时,您需要知道两件事:

  1. &nbsp;是一个HTML实体,表示一个特定的字符,这里是非中断空格,可以正式指定为Unicode字符"NO-BREAK space"(U+00A0)
  2. DOMDocument库在给定或接受字符串值时使用UTF-8作为字符编码

有了这些基本信息,很容易解决你的问题。由于DOMElement::nodeValue代表NO-BREAK SPACE(U+00A0)"'xC2'xA0"以UTF-8编码字符串的形式返回内容,并且UTF-8中的NO-BREAK PACE在PHP中是CCD_13,因此您可以简单地将其进行比较:

/** @var $td DOMElement */
$td = $tds->item(2);
if ($td->nodeValue !== "'xC2'xA0") {
    // TD content is not "&nbsp;"
}

希望这能给你所需的指导。