Проверьте, если domnodelist-> gt; item (x) -> gt; nodeValue == & quot; nbsp; & quot;

Я вошел в систему и получил страницу возврата, используя CURLзагрузил его DOMDocument и затем запросил его DOMXPATH (чтобы найти ‘table.essgrid tr’). (Затем я также запрашиваю результат, чтобы найти дочерние тд и) с результатами, 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>

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

2

Решение

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

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

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

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

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

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]