Убедитесь, что 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 != "&nbsp;" && $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> 

Но это отражает все результаты, а не только те, у кого есть время. Поэтому я думаю, что моя проблема заключается в проверке, если значение == &nbsp; , но я ничего не пробовал на своем месте, кажется, работает.

Solutions Collecting From Web of "Убедитесь, что domnodelist-> item (x) -> nodeValue == "nbsp;""

Когда вы хотите сравнить nodeValue для того, чтобы быть &nbsp; , вам нужно знать две вещи:

  1. &nbsp; представляет собой объект HTML, который представляет конкретный символ, здесь неразрывное пространство, которое может быть формально определено как символ Unicode «NO-BREAK SPACE» (U + 00A0) .
  2. Библиотека DOMDocument использует UTF-8 в качестве кодировки символов при передаче или принятии строковых значений.

Имея эту общую информацию, вы можете легко решить свою проблему. Как &nbsp; означает « NO-BREAK SPACE» (U + 00A0) и как DOMElement::nodeValue возвращает содержимое как кодированную строку UTF-8, а как NO-BREAK SPACE в UTF-8 является "\xC2\xA0" в PHP, вы можете просто сравнить его :

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

Надеюсь, это даст вам нужные указатели.