The trick with special characters like those is that they are different in latin encodings than they are in utf-8 encodings. Or what I really mean here is that you need to be consistent in your encodings.
The first step with encodings is to know what char encoding you have declared in your form. If you look at the source code of this forum page, you'll see this:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
This encoding is common and I think it's commonly called latin 1. If in my PHP code I want to handle text submitted from an HTML page that uses this encoding, then I need to keep in mind that the form's HTML declared it as ISO-8859-1. When I hand off this text to some other piece of code (like a mail program or call to [man]mysql_query[/man]) then I need to make sure that that other piece of code knows that I'm sending ISO-8859-1 text and not UTF-8 or some other encoding.
And then finally, when the mail or database code or whatever delivers that text to its final destination (such as a mail client or a query pulls the data out from a database) then I need to make sure it gets converted to the proper character encoding for display purposes.