Zuverlässiger Filter

Sasser

Erfahrenes Mitglied
Guten Morgen,

ich habe folgenden Quellcode, welchen ich per PHP auslese:

HTML:
<table class="statusBox" width="140" height="40" cellspacing="0" bgcolor="#F8F8F8" cellpadding="2">
          <tr>
             <td width="100%" class="statusLine"><font face="Courier" size="2">Bereit&#032;&#032;&#032;&#032;&#032;</font></td>
          </tr>
          <tr>
             <td width="100%" class="statusLine"><font face="Courier" size="2"></font></td>
          </tr>
          </table>

Bisher filtere ich "Bereit" mit folgendem Code:

PHP:
$html = file_get_contents ( "http://10.24.11.29/cgi-bin/dynamic/topbar.html" );
$printer ["error"] ["0"] = trim ( str_replace ( "&#032;", " ", substr ( $html, strpos ( $html, "statusLine" ) + 42, strpos ( $html, "</font>" ) - ( strpos ( $html, "statusLine" ) + 42 ) ) ) );

Leider funktioniert das nicht zuverlässig, d.h. manchmal wird 0 zurückgeliefert und durch +42 wird dann vom Anfang des Quellcodes irgendetwas zurückgeliefert.
 
Gibt es bestimmte Stellen, an denen der Wert stehen kann? Also nur in bestimmten Elementen oder ähnlichem?

PS: Du solltest den Quelltext mal auf den neusten Stand bringen, denn Elemente wie font oder Eigenschaften wie cellspacing, bgcolor und cellpadding sind seit einigen Jahren veraltet und werden teilweise nicht mehr unterstützt. Das kannst Du alles über CSS lösen.
 
Hallo,

der Wert kann nur in dem Code stehen wie oben zu sehen ist.

Leider habe ich keinen Einfluss auf diesen Code, da dieser von externer Seite kommt und nicht editierbar ist.
 
Ich habe es nun lösen können mit:

PHP:
preg_match_all ( "/<td width=\"100%\" class=\"statusLine\">(.*?)<\/td>/s", $html, $matches );
if (count ( $matches ["0"] ["0"] ) >= "1") {
     $printer ["error"] ["0"] = trim ( str_replace ( "&#032;", " ", strip_tags ( $matches ["0"] ["0"] ) ) );
 }

Wenn der Tag nicht existieren sollte, dann wird auch der Status nicht in die Variable geschrieben.
 
Zurück