string(391) " Novo Elfen Server 8.0 - Divirta-se. "
ten tekst nijak nie ma 391 znaków
jeszcze raz daj przed pregiem:
var_dump(str_replace("\0", '', $data));
// jak widzisz zawartość $project['ip'] jest taka sama jak tego ciągu który wprowadzasz ręcznie, więc to nie to. Nie mieszaj do tego jakichś zjawisk paranormalnych, w dodatku odpowiedź od serwera jest, więc 90% że wyrażenie regularne jest złe (lub nieaktualne), a 10% warto zawsze zostawić
// dobra, już samemu sprawdziłem, odpowiedź dałbyś ze źródła a nie z przeglądarki bo okazała się ona kodem xml
interesujący urywek z odpowiedzi:
players online="37" max="1200" peak="39"/>
wyrażenie regularne oczekuje natomiast:
players online="37" max="1200" peak="39" waiting="?"/>
nie znalazło tego waiting więc poległo całkiem, najprostsze rozwiązanie:
preg_match('/players online="(\d+)" max="(\d+)" peak="(\d+)"/', $data, $what);
nie dostaniesz waiting, ale jeśli chcesz go to najpierw sprawdź czy on w ogóle występuje lub np:
preg_match('/players online="(\d+)" max="(\d+)" peak="(\d+)"( waiting="(\d+)")?/', $data, $what);
względnie:
preg_match('/players( online="(\d+)")?( max="(\d+)")?( peak="(\d+)")?( waiting="(\d+)")?/', $data, $what);
ale wtedy zmieniają ci się nieco indeksy (1 => 2, 2 => 4, 3 => 6, 4 => 8)
możesz też zwyczajnie przeparsować odpowiedź jako xml lub najszybciej znaleźć interesujący ciąg poprzez substr i strpos
ale mam duże wątpliwości czy ja trzeźwo teraz myślę