If you're displaying chinese chars, your charset in your output HTML must be utf-8 or some other multibyte charset. Latin-1 just won't work.
If you make your HTML output charset utf-8 and the spanish chars still look funny, this is probably because they were captured as Latin 1. This would be the case if someone entered spanish text with accents into a <form> displayed in an html page with charset of latin-1.
In that case, someone is entering chars which have encodings that are encoded differently in Latin 1 than in UTF-8. An example of such a char is Ñ. In Latin 1 encoding, it's one byte. In UTF-8, it's two bytes. Basically any char with [man]ord[/man] value greater than 127 is going to be a two-byte char in UTF-8.
I think this is what happens. Someone types Ñ in a <form> displayed in their browser and clicks submit. The browser sees that the charset of the page is Latin-1 and says "ok Ñ in latin-1 encoding is a single byte 11010001" and the single-byte value of 11010001 is what the browser sends for the char Ñ. PHP receives it on the other end and stuffs it into a database.
Had you declared your input form as UTF-8, the Ñ char would have been sent from your browser to your server as two bytes. If your DB stores them as UTF-8 and the output page displays them as UTF-8 then they would probably look fine.
If you captured spanish chars as Latin-1, stored them as UTF-8, and displayed them as UTF-8, they are probably broken. You could have captured them as Latin-1, utf8_encoded them before inserting them into the db, and they'd probably look fine. It's too late for that. You might try utf8_encode on the spanish chars after they come out of the DB and they might display properly in a page with charset utf-8, but maybe not. That's pretty kludgey if you ask me.
If you captured chinese chars in a Latin-1 form (which I believe is more or less pointless) then the browser might have gone "whatever dude" and just passed on the info as-is. Makes me wonder what a chinese browser does with data entered in a Latin-1 form. This is probably why the chinese chars appear fine when stored as utf-8 and displayed as utf-8 because chinese chars don't make any sense at all in Latin-1 encoding.
I linked the wrong thread in my last post. Weedpacket spent lots and lots of time helping me understand this whole thing in this thread. Skip over the first few posts and you'll find some interesting info.
I hope this helps. I know it can be confusing. The best practice is declare everything utf-8 and use the multi-byte string functions.