Cita:
Iniciado por serser
Si la cadena es enviada a través de POST, puede que llegue alterada antes de llamar a la función. Prueba con un echo $str; antes de retornar la cadena modificada por preg_replace, a ver que sale.
echo: \"@ ï \"Panamá Pedí Olvidó último Volveré @ - % #$#89/¨*]{}+´´´[
Bien raro que esto esta pasando (PHP 5.3.0)