Hola,
Nota que la cabecera HTTP que envías con PHP e indica la codificación del archivo, esto es, la codificación que indiques ahí, ha de coincidir con la que indicas en la "cabecera" del archivo XML, esto es, no como pones arriba, la primera en "UTF-8" y la segunda en "ISO".
Piensa también que el archivo que contiene el propio código PHP (por resumir) ha de guardarse, propiamente, usando la codificación adecuada, es decir, ha de coincidir con la de las "cabeceras" mencionadas antes. No estoy seguro para ISO (no sé si basta con guardar el fichero codificado en "ANSI"), pero, para UTF-8 la codificación en que se guarda el fichero ha de ser esa: UTF-8.
Por último, como comenté arriba, en la base de datos, al menos los de tipo "string", "texto", han de guardarse también con la correspondiente codificación. A lo menos las cuatro cosas creo que son necesarias para que no te encuentres con problemas de caracteres extraños como los que te has topado.
Resumiendo:
1º Fichero del Script PHP guardado en la codificación elegida (UTF-8 creo que se recomienda, al menos a mí, y no sólo a mí, me va bien)
2º Cabecera HTTP mediante PHP (con la función "header") o mediante el ".htacess", o mediante la clave correspondiente en el archivo de configuración de Apache, digo, que indique la codificación "que perseguimos".
3º Meta-etiqueta HTML o XML, en nuestro caso, que indique a su vez la codificación de caracteres correspondiente.
4º Datos (texto) en la base de datos codificados, igualmente, de manera que coincida con la codificación indicada anteriormente de las maneras que comentamos.
Y, bueno... creo que eso es todo... aunque es un tema que en cierto modo se me escapa, no nos vamos a engañar. Creo que debes hacer unas cuantas pruebas y darás con el tema, que ya verás como no es tan "lioso" como yo, lamenteblamente, puedo explicarlo, ni mucho menos.
