$highscore = str_replace($val, ";", "</td><td>");
Es heißt nicht
str_replace($string, $substring, $replace_string);
sondern (dummerweise)
str_replace($substring, $replace_string, $string);
D.h. Du brauchst
$highscore = str_replace(";", "</td><td>", $val);
Genau aus dem Grunde hab ich mir auch meine eigenen Funktionen dafür definiert. ;-)