DOM HTML sederhana mengembalikan NULL

Saya mengambil data dari situs web menggunakan parser DOM HTML Sederhana (http://simplehtmldom.sourceforge.net/ )

HTMLnya adalah:

<tr class="productListing-odd">
    <td align="right" class="productListing-data">&nbsp;0&nbsp;</td>
    <td class="productListing-data">&nbsp;<a href="http://www.spellvault.net/p46563/Liliana-of-the-Veil/product_info.html" onmouseout="hd()" onmouseover="sd('images/101257121.jpg')">Liliana of the Veil</a>&nbsp;<br>    </td>
    <td align="center" class="productListing-data">&nbsp;Black&nbsp;</td>
    <td align="center" class="productListing-data">&nbsp;Mythic&nbsp;</td>
    <td align="center" class="productListing-data">&nbsp;Innistrad&nbsp;</td>
    <td align="right" class="productListing-data">€42,50&nbsp;</td>
    <td align="center" class="productListing-data"><input type="text" name="var[46563]" value="" size="4">&nbsp;    <span class="nowrap"><span class="template-button-left">&nbsp;</span><span class="template-button-middle"><input class="submitButton" type="submit" value="Bestel"></span><span class="template-button-right">&nbsp;</span></span>&nbsp;</td>
  </tr>

Dan phpnya:

include_once('simple_html_dom.php');

$html = file_get_html('-the url of the search query on the website-');

$array = array();
foreach($html->find('.productListing-odd, .productListing-even') as $element) {
    $row = array(
        'name' => strip_tags($element->childNodes(1)->innertext),
        'set' => strip_tags($element->childNodes(4)->innertext),
        'price' => strip_tags($element->childNodes(5)->innertext),
        'stock' => strip_tags($element->childNodes(0)->innertext)
    );
    array_push($array, $row);
}
echo json_encode($array);

Untuk beberapa alasan, nilai 'harga' terus menghasilkan NULL. Semua nilai lainnya dikumpulkan dengan benar. Saya tidak tahu mengapa hal ini terjadi, karena semua elemen tampaknya memiliki struktur yang sama.

Terima kasih sebelumnya!


person Leon    schedule 31.01.2014    source sumber
comment
Apakah ada alasan mengapa Anda menggunakan strip_tags($element->childNodes(1)->innertext) daripada $element->childNodes(1)->plaintext ?   -  person Enissay    schedule 01.02.2014
comment
Atau lebih baik lagi: $element->find('td[2] a', 0)->text()   -  person pguardiario    schedule 01.02.2014
comment
Alasannya di sini adalah karena saya cukup baru dalam hal ini. Terima kasih atas sarannya!   -  person Leon    schedule 02.02.2014


Jawaban (1)


Kemungkinan besar HTML yang Anda urai memiliki rangkaian karakter non-unicode. Dan ini menjadi masalah karena json_encode() hanya berfungsi dengan pengkodean UTF-8. Hampir semua data yang Anda parsing memiliki karakter ASCII sehingga tidak menimbulkan masalah. Namun data harga (kolom ke-6) berisi karakter non-ASCII '€' yang json_encode() gagal (dan mengembalikan nol).

person hindmost    schedule 31.01.2014