Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [symfony]validacja formularzy "ajaxowych", zamiast UTF-8 otrzymuję krzaki
enigma
post
Post #1





Grupa: Zarejestrowani
Postów: 163
Pomógł: 0
Dołączył: 10.09.2006

Ostrzeżenie: (0%)
-----


Witam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Tworząc proste formularze (bez AJAX'a) walidacja przebiega normalnie. To znaczy kod
  1. <?php echo form_error('name') ?>

"wyciąga" poprawnie tekst z plików .yml
jednak gdy używam formularzy AJAX'owych (napisanych osobiście lub też używając sfYzAjaxValidationPlugin), i formularz zwróci błędy zamiast polskich znaków mam krzaki
Tylko proszę nie pisać żebym użył ISO-8859-2 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Pozdrawiam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(enigma @ 20.10.2007, 11:40:56 ) *
Tylko proszę nie pisać żebym użył ISO-8859-2 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
A ja myślę że może właśnie używasz tego kodowania.
W symfony wszystko jedzie domyślnie na UTF-8, może masz coś inaczej? Sprawdź pliki.

Firebug pomoże CI też sprawdzić jakie nagłówki dostajesz. Może coś jest źle puszczane do przeglądarki.
Go to the top of the page
+Quote Post
enigma
post
Post #3





Grupa: Zarejestrowani
Postów: 163
Pomógł: 0
Dołączył: 10.09.2006

Ostrzeżenie: (0%)
-----


hmm, w tym co pokazuje Firebug szukałem iso i nie ma
w zakładce HTML kodowanie mam
  1. <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>


w zakładce SCRIPT
Kod
Ajax.Base.prototype = {
805 setOptions: function(options) {
806 this.options = {
807 method: 'post',
808 asynchronous: true,
809 contentType: 'application/x-www-form-urlencoded',
810 encoding: 'UTF-8',


więc nie wiem co jest grane, tym bardziej że tak jak pisałem wcześniej bez AJAX'a nie było krzaków
plików konfiguracyjnych nie zmieniałem

kurcze pieczone (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ja to zawsze musze mieć jakieś dziwne problemy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)


EDIT
a tam gdzie mi krzaczy Firebug w zakładce NET pokazuje
Kod
Response Headers
Date    Sat, 20 Oct 2007 11:48:24 GMT
Server    Apache/2.2.3 (Ubuntu) PHP/5.2.1
X-Powered-By    PHP/5.2.1
Expires    Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control    no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma    no-cache
X-Json    ([['error_for_name',' &darr;&nbsp;Muisz podać tag &nbsp;&darr;']])
Content-Length    0
Connection    close
Content-Type    text/html; charset=UTF-8


Ten post edytował enigma 20.10.2007, 12:54:47
Go to the top of the page
+Quote Post
joohn
post
Post #4





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 10.12.2007

Ostrzeżenie: (0%)
-----


Co prawda odświeżam stary temat, ale komuś jeszcze może się to przydać (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Kod który zwraca headera z JSONem musi wyglądać tak:
  1. <?php
  2. $this->getResponse()->setHttpHeader("X-JSON",json_encode($output));
  3. return sfView::HEADER_ONLY;
  4. ?>


Gdzie $output to po prostu tablica mogąca zawierać znaki w utf.
Jeżeli odpowiedź JSON jest budowana jako string w postaci ["aaa","bbb"], wtedy pokażą się krzaki.

Pozdrawiam
Go to the top of the page
+Quote Post
imblue
post
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 28.09.2008
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Co prawda też odświeżę temat, ale ze względu że nie znalazłem w google praktycznego przykładu a widzę że wiele osób ma problem z krzakami.

Przykładowa funkcja pobierająca tytuł:
  1. <?php
  2. public function executeTitlelink()
  3. {
  4.    ...
  5.    $this->getResponse()->setHttpHeader('Content-Type','text/x-json; charset=UTF-8');
  6.    $output = array("title_i18n_pl" => $page->getTitlePl(), "title_i18n_en" => $page->getTitleEn());
  7.    return $this->renderText(json_encode($output));
  8. }
  9. ?>

W template wczytujemy do inputa poprzez link:
  1. <?php
  2. echo link_to_remote(__('Pobierz'), array(
  3.    'url' => 'categories/titlelink', ...
  4.    'complete' => "var data = (request.responseText.evalJSON());
  5.                   $('categories_title_i18n_pl').value = data['title_i18n_pl'];
  6.                   $('categories_title_i18n_en').value = data['title_i18n_en']"
  7.    ))
  8. ?>

Czyli używamy tylko php'owe json_encode i evalJSON (zwykle eval javascript'owe nie działa w tym przypadku a request to pierwszy paramet funkcji onComplete) i możemy przekazywać tablice zmiennych. Oczywiście dotyczy to php >= 5.2 i prototypejs 1.5.1, no i zakładając że mamy wszędzie dobrze poustawiane kodowanie na UTF-8.

Pozdr.
Go to the top of the page
+Quote Post

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: 24.08.2025 - 13:38