bienvenido al foro, te invito a que consultes las políticas del foro
volviendo al tema, ten en cuenta que para implementar una codificación, son muchos los elementos que entran en juego, no creo necesario que añadas la cabecera (header) en php y el error que te dio te lo explico al final.
a ver, elementos a tener en cuenta para una correcta implementación de UTF8:
1 - Base de datos: de nada sirve implementar UTF8 si la base de datos no está en UTF8, y si no se puede cambiar (no es fácil y sobre todo cuando se necesita una codificación insensible a mayúsculas), lo ideal es tener una capa intermedia (como DBAL) que se encargue de convertir de UTF8 a la codificación de la DB y viceversa, dentro de las más rudimentarias es aplicar
utf8_encode/utf8_decode, SQL
SET NAMES en MySQL, y librerías como
iconv o
multibyte.
2 - Archivos, lo IDEAL es que todos los archivos estén codificados en
UTF8 sin BOM, editores como NotePad++ te pueden ayudar a verificarlo y convertirlos, por defecto NetBeans usa está codificación pero no he investigado si la puede cambiar o reconvertir archivos, DreamWeaver similar.
3 - El META en el HTML: muy importante ya que le indica al navegador con qué se va a trabajar
4 - El WebServer: por defecto, WS como apache disponen de todas las codificaciones (charset) posibles, pero aveces en instalaciones manuales hay que especificarlas, aunque es un caso poco común, solo me pasó en mi primera instalación de apache desde 0
Con todo lo anterior se puede lograr una buena adaptación de UTF8, el error de php te aparece debido a que llamas al header cuando ya ha salido data o texto al stdout, por lo cual puede indicar que tengas texto antes, echo's o el simple DOCTYPE, header debe ser llamado antes, pero como te indique, no es realmente necesario establecer la codificación por header porque se supone que de eso de encarga el web server, se usaría para en casos que necesites exportar data en una codificación especifica.
espero haber aclarado tus dudas, cualquier otra responde por éste mismo hilo, saludos.