Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Uft-8 i baza danych - problem z kodowaniem
DeyV
post
Post #1





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Heh - rzadko zadaje tu pytania, ale trafiłem na problem, z którego nie do końca wiem, jak wybrnąć.

Przekładowy kod:
  1. <?php
  2. $dbh = new PDO('pgsql:host=localhost;dbname=test', 'php', 'php');
  3. $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  4.  
  5. $sText = $dbh->quote( $_GET['t'] );
  6. $sQuery =  "insert into t1 ( text ) values ( ". $sText .")";
  7.  
  8. echo '<pre>'. $sQuery .'</pre>';
  9.  
  10. $dbh->exec( $sQuery );
  11. ?>

Odpalane poprzez:
index.php?t=ąśżźć

Wynik?
Cytat
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[22021]: Character not in repertoire: 7
ERROR: invalid byte sequence for encoding "UTF8": 0xb9
HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".' in index.php:19
Stack trace: #0 index.php(19): PDO->exec('insert into t1 ...') #1 {main} thrown in index.php on line 19


I w sumie nie jest to dziwne, bo zapytanie wygląda mniej więcej tak:
Cytat
insert into t1 ( text ) values ( '����� ')


Kilka uwag. Baza danych to postgres 8.2 oczywiście w UTF-8. Strona też jest w UTF-8.

Używam danych z GET tylko dlatego, że wygodniej w ten sposób zasymulować problem z kodowaniem. Wiem oczywiście, że można łatwo skonwertować dane pochodzące z GET, tak by ten problem usunąć, jednak problem pozostanie, ponieważ nie tak łatwo jest zweryfikować wszystkie dane.

Znalazłem pewien materiał na ten temat: http://www.phpwact.org/php/i18n/charsets
dział: Checking UTF-8 for Well Formedness

Ale niezbyt podoba mi się myśl, by każdy tekst od usera przepuszczać przez
Cytat
$t = iconv("UTF-8","UTF-8//IGNORE",$t);


Znacie jakieś inne rozwiązania tego problemu?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 09:44