我已经登录,并使用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> </div>
<div>not blank:</div>
<div> </div>
<div>not blank:</div>
<div>13:00</div>
<div>not blank:</div>
<div> </div>
<div>not blank:</div>
<div>14:30</div>
<div>not blank:</div>
<div>13:00</div>
<div>not blank:</div>
<div> </div>
但它呼应了所有的结果,而不仅仅是有时间的结果。所以我认为我的问题是检查值==nodeValue
,但我在它的位置上尝试的似乎都不起作用。
当您想将
与
进行比较时,您需要知道两件事:
是一个HTML实体,表示一个特定的字符,这里是非中断空格,可以正式指定为Unicode字符"NO-BREAK space"(U+00A0)- 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 " "
}
希望这能给你所需的指导。