Hola,
Tu problema con substr() es que no has leido atentamente su descripcion en el manual:
Cita: string substr ( string string, int start [, int length])
Es decir, tiene como parametros el texto, la posicion del primer caracter y el numero de caracteres. En tu codigo le pasas como tercer parametro la posicion del }, que substr() lo interpreta como el numero de caracteres.
Suerte.