2012-08-28 11 views
5

Pracuję na stronie internetowej, która używa/zapisuje znaki akcentowane w bazie danych. Mam zestaw szablonu strony tak, że config.php zmienną charset dopasowuje ustawienia, npZestaw kodów konfiguracji CodeIgniter i obsługa UTF-8

<meta charset="<?php echo $this->config->item('charset');?>"> 

Problem mam jest, gdy $config['charset'] jest ustawiony na UTF-8, w formie sprawdzanie poprawności kończy się niepowodzeniem i wygląda tak, jakby żadne znaki nie zostały przesłane, jeśli dołączono znak akcentowany. Tak więc, na przykład, wymagane pole zostanie odesłane, jeśli á jest zawarte w dowolnym miejscu ciągu. Ciąg minus á działa dobrze.

udało mi się uzyskać tej pracy poprzez zmianę $config['charset'] do ISO-8859-1 i przekształcania tekstu na UTF-8 przed włożeniem/po pobraniu z bazy danych z PHP utf8_encode() i utf8_decode(). Czy jest to najlepszy sposób, czy też brakuje mi czegoś, co jest potrzebne, aby uzyskać kodowanie UTF-8 z akcentowanymi znakami, pracując w CodeIgniter?

Wszelkie porady są mile widziane.

+0

Upewnij się, że ustawiłeś wszędzie UTF-8. Trudno powiedzieć, co jest nie tak, ale prawdopodobnie w pewnym momencie masz inny zestaw znaków. Musi przeczytać: http://www.joelonsoftware.com/articles/Unicode.html. – Styxxy

Odpowiedz

12

Musisz upewnić się, że używasz UTF-8 wszędzie i że zarówno PHP, jak i MySQL są skonfigurowane do obsługi UTF-8.

w HTML, należy dodać meta-tag:

<meta charset="utf-8" /> 

i zapisać go w formacie UTF-8. tutaj jest how to do that in notepad++.

Definiowanie tabel MySQL obsługuje UTF-8, należy utworzyć tabelę:

DEFAULT CHARSET=utf8; 

i ustawić połączenie:

mysql_set_charset('utf8', $con); 

Enable UTF-8 w php.ini:

default_charset = "utf-8" 

Pełna kontrola ręczna Handling Unicode Front To Back In A Web App

+0

Wielkie dzięki za odpowiedź i link - sprawdzę, aby upewnić się, że UTF-8 jest cały czas używany. Problem z weryfikacją formularza spowodowany był ustawieniem $ config ['charset'] na "UTF-8" (wszystko wielkimi literami) zamiast "utf-8" (wszystkie małe litery). Z jakiegoś powodu ustawienie domyślne, nazywane wielkimi literami "UTF-8", nie działa (przynajmniej nie w mojej konfiguracji). –

+0

fajnie, z przyjemnością pomogę :) +1 – Kuf

+0

Mały komentarz dla osób, które znalazły go w google - alternatywnym źródłem tego problemu może być kodowanie tabeli _lub kolumny_ (tak, zmiana kodowania tabeli nie zmienia kodowania poszczególnych kolumn) - w takim przypadku edycja wartości w kolumnie z ciągiem znaków UTF-8 powodowałaby wyświetlenie ostrzeżenia "Niepoprawna wartość ciągu znaków", które nie jest widoczne, gdy po prostu uruchomisz zapytanie za pomocą codeigniter. Zobaczysz tylko, że zamiast znaku UTF-8 . – MarcinWolny