"Somewhere" along the path in your new environment, at least once component changed the way it handles encoding/decoding data.
You will need to track down every border between all your components and make sure that all data is in the format you expect. Preferrably, you transfer all data encoded as UTF-8 between your components, and decode to Unicode on input/retrieval, and encode on output/web page.
The checklist is roughly:
- Find out how the data is stored in the database
- Find out how the database driver delivers the data. Preferrably make it deliver the data encoded as UTF-8 and have the DBD decode it to Unicode.
- Find out how the data is stored in text files on disk. Preferrably encode them as UTF-8.
- Find out how the data is read from the files. Preferrably decode it to unicode.
- Find out how the data is converted/concatenated with other data (for example, templates). Either encode to the target character set or decode to Unicode.
- Find out how the data is written. Make sure that the encoding used for the data matches the encoding used for the headers and the encoding stated in the HTML page.