Pues php no te esta cambiando los acentos si no que al momento de almacenar la información en tu bd tu tabla tiene mal establecida la codificación. Yo lo que hago para evitarme este problema es aplicarle
htmlentities() al texto que voy almacenar y ya cuando lo muestro uso
html_entity_decode()
Espero que ayude este comentario.
Saludillos.