Re: PHP + PostgreSQL: invalid byte sequence for encoding "UTF8"

From: Date: Sun, 22 Jul 2007 00:28:34 +0000
Subject: Re: PHP + PostgreSQL: invalid byte sequence for encoding "UTF8"
References: 1 2  Groups: php.db 
Request: Send a blank email to php-db+get-43839@lists.php.net to get a copy of this message
thx a lot - what you're writing is really necessary to handle this problems in the future. The reason why I was looking for a faster solution is when you have to handle huge data which is utf8, and sometimes not utf8... etc.... you understand what I mean? ;-) Bruno Lustosa wrote: > On 7/21/07, aldnin <aldnin@yahoo.de> wrote: >> When I try to send this query (select 'lacarrière' as test;) to a UTF8 >> initialized pgsql-database (8.2.4) from PHP 5.2.3 I get this error: >> >> ERROR: invalid byte sequence for encoding "UTF8": 0xe87265 > > Short answer: start using utf-8 for just everything, and your problems > will be gone. > > Long explanation: > This is usually the case when you get data from a form and put it in > the database, and the two aren't using the same encoding. > I guess your pg connection is using unicode (so the db expects unicode > input), and your html is set to something else. To fix this, you have > two choices: > > 1-Run utf8_encode() on the input from your forms; or > 2-Set all your html pages to use utf-8 encoding. > > IMHO, option 2 is the way to go. I've been using utf-8 for everything > for quite some time, and has solved all my problems dealing with > accents, and so on. > You will need: > - All your HTML files encoded to utf-8 (quite easy with iconv, if you > are using Linux); > - Add a "Content-type: text/html; charset=utf-8" to all your pages. > This is easily done using PHP's header() function in a file included > by all your scripts. > > This way, the pages will be unicode, any data entered will be posted > as unicode, and you will have no problems sending them to a database > that uses unicode. > Forget the <meta> tag that sets the encoding. It's only used in case > the server doesn't send a Content-type header, which isn't the case > normally. By default, I think at least apache sends the content-type > as iso8859-1. >

« previous php.db (#43839) next »