Kodowanie znaków

Witam.

Mam problem z kodowaniem znaków w niektórych elementach Yii, a dokładnie w Formularzach:




<?php echo $form->labelEx($model,'Hasło'); ?>



Ustawiony mam jezyk PL w aplikacji ale w miejscu gdzie powinno wyswietlic "Hasło" wyswietla "Has�o"

Czy wie ktoś może jak to rozwiązać ?

Dodam, że ogólnie polskie znaki widnieją na stronie poza własnie tym jednym :confused:

Zakładam, że masz ustawione kodowanie w sekcji HEAD głównego layoutu:


<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Prawdopodobnie w modelu lub widoku masz ustawione inne kodowanie pliku. U mnie dzieje się tak często gdy generuję kod przy pomocy gii. Wtedy domyślnie mam ANSI w widokach i krzaki polskich znaków (najgorzej jest w gdy pojawią sie polskie znaki w kontrolerach lub modelach z kodowaniem ANSI - wtedy z aplikacją potrafią się dziać cuda i człowiek traci czas na szukanie błędów których nie popełnił >:( ).

Polecam Ci najlepszy edytor na świecie - Programmer’s Notepad - najlepiej w wersji portable. Otwierasz dokument, potem File > Encoding i ustawiasz “UTF-8 No Mark” i jest OK.

A tak przy okazji to wie ktoś jak zrobić by gii generowało kod w UTF zamiast ANSI? A może to tylko u mnie ten problem. Coś tam czytałem o tym na forum ale nie dokopałem się do przekonującego rozwiązania.

Tak.

Meta jest ustawiona.

Język w konfigu Yii też.

Views i modele są ustawione na kodowanie utf-8.

Zastanawiam się czy to nie wina jakiegoś moduły Yii wtym przypadku CActiveForms




$model=new LoginForm;


$form=$this->beginWidget('CActiveForm', array(

	'id'=>'logowanie',

	'enableAjaxValidation'=>true,

	'action' => 'login',

));?> 

<div style="float: left;">

<?php echo $form->error($model,'username'); ?>

<?php echo $form->error($model,'password'); ?>

</div>

<div id="login">

<?php echo $form->label($model,'Login',$htmlOptions=array(

	'value'=>$form->error($model,'username'),

));?></div>


<div id="logback1"><?php echo $form->textField($model,'username'); ?></div>

<div id="haslo"><?php echo $form->labelEx($model,'Hasło'); ?></div>

<div id="logback2"><?php echo $form->passwordField($model,'password'); ?></div>

<button type="submit"><img style="float: left;" src="<?php echo $gurl; ?>save.png">Zaloguj</button>


<?php $this->endWidget(); 



A już widzę o co chodzi. W chwili obecnej yii próbuje pobrać wartość właściwości ‘Hasło’ modelu której nie ma.

To:


<div id="haslo"><?php echo $form->labelEx($model,'Hasło'); ?></div>

Zamień na:


<div id="haslo"><?php echo $form->labelEx($model,'password'); ?></div>

Ale w tym przypadku będzie mi się wyświetlało na stronie “Password”, a ja potrzebuje żeby był napis “Hasło” :)

Zatem zdefiniuj w modelu atrybut ‘password’ oraz jego etykietę.




	/**

	 * Declares attribute labels.

	 */

	public function attributeLabels()

	{

		return array(

			'rememberMe'=>'Remember me next time',

                        'login'=>'Login',

                        'password'=>'Hasło',

		);

	}



Znalazł ktoś jakieś sensowne rozwiązanie z tym kodowaniem? Też mam ustawione wszystko na UTF-8 włącznie z plikami widoków, modeli i kontrolerów i mam krzaczki. Nawet jak używam formularza i wysyłam sobie polskie znaki przez textarea to wyświetla krzaczki… już nie nie wiem o co chodzi kompletnie…

poprawka… działa już u mnie… ustawiłem sobie wcześniej htmlentities() na dane z textarea i zamieniał polskie znaki na enty dziwne, ale bez tego ładnie chodzi… no i pomogło przestawienie formatu plików na utf-8.

pozdr.

witam

rowniez mam podobny problem ;/ tyle ze usuwa mi linki na stronie gdy zamieszcze polski znak w linku (wersja demo link Home zmieniam na Strona główna) i wtedy mi znika lecz gdy zmienie Home na Strona glowna widac link na stronie. jak to zmienic? moglby ktos rowniez powiedziec jak zmienic jezyk komunikatow itp na polski?

Problem jest prawdopodobnie w kodowaniu plików. Gii generuje pliki kodowane w ANSI i tutaj aby użyć polskich czcionek musisz używać encji, ale wiadomo, że nie o to nam chodzi… a ucina bo pewnie używasz htmlentities() lub podobnej funkcji? Aby usunąć problem, musisz przekonwertować wszystkie pliki widoków i najlepiej kontrolerów i modeli też. Możesz ściągnąć np. Notepad++ otworzyć w tym plik i wybrać "Formatuj->kodowanie", tylko bardzo ważna rzecz tutaj… nie formatuj an UTF-8 tylko na UTF-8 bez BOM. UTF-8 może stworzyć znaki binarne, które są niewidzialne dla wiekszości edytorów.

Pamietaj, że framework includuje serie plików zanim da wynik, więc najpierw pozamieniaj wszystkie layouty, widoki itd, pozniej sprawdzaj efekty…

Pozdr.

Zmienilem jezyk komunikatow na polski w pliku CAplication.php :P

Zauwazylem ze jak zostawie w charset ( public $charset=’’; ) puste pole zamiast UTF-8 to pojawiaja mi sie linki z polskimi znakami tylko zamiast polskich znakow mam � i wszystkie polskie wyrazy w pliku main.php maja taki znaczek zamiast polskiego znaku ;/

Nie jestem mistrzem Yii, ale to chyba nie jest plik, w którzym należy grzebać cokolwiek :)

zeby komunikaty byly tlumaczone na jezyk polski, wystarczy zmienic jezyk w pliku konfiguracyjnym (np. main.php):




return array(

...

'language'=>'pl',

...

);



funkcja Yii::t() bazuje na tym parametrze domyslnie.

Mozna tez zmieniac język z kodu:




Yii::app()->language = 'pl';



I jak tam Panowie i Panie ?

Da się to jakoś prosto przestawić kodowanie na całą aplikację?

u mnie żadna z powyższych metod nie rozwiązuje problemu wyświetlania krzaczków w formularzach, Clistach i innych tego typu widgetach. :(

A jak wpiszesz polskie znaki w plik widoku to pojawiają się normalnie czy też krzaki? Jeśli pojawiają się normalnie a widgetach masz krzaki to może masz po prostu kodowanie tabel w bazie inne niż utf8 ? Ale to tylko jeśli widgety i formy korzystają z danych z bazy.