I tried changing it to
£
in the database
Don't. The database should contain raw text, never HTML-encoded content. The time to HTML-encode (using htmlspecialchars()
) is when you insert some raw text into HTML at the output templating stage, and not before. Even if you got this to work, you'd only have fixed one character; the other 107025 non-ASCII characters would still break.
Clearly there is a mismatch of encodings here; you must ensure you use the same encoding (preferably UTF-8) everywhere, in particular:
- the encoding you've saved the PHP file in, if it contains any non-ASCII characters;
- the charset declared on the output page (by Content-Type
<meta>
orheader()
, preferably both; if you only use a<meta>
to set it and the server is incorrectly configured it may set its owncharset
overriding yours); - the encoding of the column in the database (each column has its own collation, so just setting it on the table is ineffective);
- the encoding used by PHP to talk to MySQL. This should be set using
mysql_set_charset
.
Unfortunately, none of these settings default to UTF-8.
bobince
2010-09-15 09:33:01