El asunto es que estás combinando funciones totalmente fuera de lugar, no puedes esperar que con substr() "limites" la región en la que str_replace() va a aplicarse.
Así no se usan las funciones para cadenas de texto en PHP, así que sería bueno que plantees otra estrategia.