![]() |
![]() ![]() |
![]() |
![]() ![]()
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:
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? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 611 Pomógł: 19 Dołączył: 28.02.2005 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
get i polskie fonty to beznadziejny pomysł , przesyłaj postem
Ten post edytował sticker 9.02.2008, 20:40:11 |
|
|
![]()
Post
#3
|
|
Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
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.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 54 Pomógł: 2 Dołączył: 24.08.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
spróbuj dodać SET NAMES:
|
|
|
![]()
Post
#5
|
|
Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Nic z tego - pozostaje dokładnie ten sam problem.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 235 Pomógł: 17 Dołączył: 18.07.2007 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
ja bym jednak zrezygnował z tego rozwiązania. jeśli chodzi o sql to jest chyba możliwość konwersji. z tego co pamiętam
insert into cos (pole) values (_utf8('ść')) |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 54 Pomógł: 2 Dołączył: 24.08.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
A może problem jest z kodowaniem po stronie postgresql ? Sprawdź jakie masz ustawione kodowanie na bazie danych, czy UTF 8,
dodatkowo teraz zauważyłem że używasz postgresql wiec chyba powinno być: SET CLIENT_ENCODING UTF8 zamiast SET NAMES utf8 Dodatkowo jeżeli strona zakodowaną masz w ISO 8859-2 korzystaj z iconv dla zmiany na UTF 8 poszczególnych zmiennych |
|
|
![]()
Post
#8
|
|
Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Więc tak:
- W PG SET NAMES jest aliasem do SET CLIENT_ENCODING - więc to nie ma znaczenia chyba. - Strona i baza jest na pewno w UTF-8, problem pojawia się czasem (bardzo rzadko) gdy ktoś wklei jakiś dziwny tekst, np. pochodzący z Worda, co potrafi wywołać ten mocno nieprzewidywalny błąd. Dlatego też wstępnie zastosowałem iconv tylko do usuwania niepoprawnych znaków, i wstępnie - wygląda na to, że działa to poprawnie. Ale rozwiązanie wcale mi się nie podoba. Szukam lepszego (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#9
|
|
Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 13.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Panowie miałem podobny komunikat w Zend F. gdzie w sumie w klasie były 3 metody na krzyż, co się okazało plik klasy nie był zapisany w UTF-8 (nic do bazy nie wysyłałem ale wywalał mi się komunikat na stronie j.w.) po zmianie kodowania pliku klasy problem sam zniknął bez zmiany nawet jedej linii kodu.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 19:42 |