ZF – kodowanie dla filtra StringToLower

Tym razem krótki wpis o tym, jak starciem 4 godziny na znalezieniu błędu związanego z kodowaniem. Krótko w czym rzecz… Podpinałem mapy Google do formularza Zend. Zadanie proste – wpisuje nazwę ulicy, a zwracana jest długość i szerokość geograficzna. Wszystko pięknie działa napisane w JS. Teraz następuje wysłanie formularza, odbiór danych i przekazanie ich do modelu. Jakie było moje zdziwienie, kiedy w modelu zamiast polskich znaków wyskoczyły krzaczki-pytajniki.

Jak to rozwiązać?Moja pierwsza myśl – błędne kodowanie pliku. Sprawdzam, jednak UTF8 (tekst zapisany w pliku jako echo wyświetlał polskie znaki).

Druga myśl – mapy Google zwracają w innym kodowaniu – po za komentowaniu całego kody związanego z mapami błąd nadal występował.

Trzecia myśl – coś z formularzem w Zendzie. Także zacząłem komentować wpisy związane z tym elementem. Nagle po za komentowaniu filtrów zaczęły występować polskie znaki. Tak więc stopniowo od wcementowywałem i znalazłem winnego – filtr StringToLower.

Rozwiązanie?

Bardzo proste :) Wystarczyło sięgnąć do dokumentacji Zend, dodać w konstruktorze obiektu-filtra kodowanie i wszystko działa jak należy :)

  1. $street->addFilters(array(
  2. new Zend_Filter_StringToLower('UTF-8'),
  3. new Zend_Filter_StringTrim(),
  4. new Zend_Filter_StripNewlines(),
  5. new Zend_Filter_StripTags()
  6. ));

Komantarz od kolegi Thommee:

Dokładnie. Jeśli jednak mamy 100 formularzy a w nich wiele pól z filtrami to będziemy mieli dużo pracy… Jest jednak na to rozwiązanie. Filtr Zend_Filter_StringToLower – w przypadku gdy nie podamy kodowania – pobiera je sobie z „mb_internal_encoding()”. Jeśli mamy ustawione coś innego niż utf-8 wówczas mamy problem taki jak autor wpisu. Solucja: gdzieś na początku aplikacji, np w bootstrapie, czy nawet w index.php wpisujemy mb_internal_encoding(‚UTF-8′);