is it giving you an error, or not returning any text? if it's not returning text, try putting an error_reporting(-1) before it's printed out so it will show you the error. I just tried 3 different ones on my machine and here's what i got:
$test = "safahj&asfhjhkasf & &&asfljhkjhasd";
$test1 = ereg_replace("[\&]","-",$test);
$test2 = eregi_replace("[\&]","-",$test);
$test3 = str_replace("[\&]","-",$test);
echo "<BR>".$test1."<BR>".$test2."<BR>".$test3;
// RETURN VALUES:
// safahj-asfhjhkasf - --asfljhkjhasd
// safahj-asfhjhkasf - --asfljhkjhasd
// safahj&asfhjhkasf & &&asfljhkjhasd
so i dunno... eregi_replace has always worked for me...