Sonderzeichen in Formaularen und Buttons

Jetzt kommt mal wieder ne richtig doofe Frage, aber wie kann ich erreichen das auf einem Button Ändern steht? Mit encode gehts nicht, mit Yii::t() auch nicht, und wenn wenn ich ein Ä eingebe dann zeigt es gar nichts mehr an. Gibt es eine Möglichkeit? Hab das Problem auch in DropDownLists und an verschiedenen anderen Stellen.

Grüße

Martin

Hast du deine Datei UTF-8 codiert gespeichert? Falls ja, zeig mal ein bisschen Beispielcode, was du genau machen möchtest.

Zum Beispiel sowas:

<?php echo CHtml::dropDownList('suche', $_REQUEST['suche'], array(

	&#039;1&#039;=&gt;Yii::t(&#039;Durchfuehrung&#039;, &#039;Alle Termine&#039;),

        ‘2’=>Yii::t(‘Durchfuehrung’, ‘Termine mit möglicher Anmeldung’),

	&#039;3&#039;=&gt;Yii::t(&#039;Durchfuehrung&#039;, &#039;Termine in Vorbereitung&#039;),


	&#039;4&#039;=&gt;Yii::t(&#039;Durchfuehrung&#039;, &#039;Abgelaufene Termine&#039;),


	));

?>

Wenn ich hier das ö (rot) so reinschreibe dann ist das Feld leer. Wenn ich es als &ouml; schriebe wird es als &ouml; angezeigt. Wie kann ich erreichen das das ö angezeigt wird?

Wie Mike sagt, deine PHP-Dateien müssen UTF-8 kodiert vorliegen dann sollte es klappen. Wenn das bereits der Fall ist, dann schaue mal nach (mit z.B. Firebug) ob dieser http-header gesetzt ist:

Content-Type: text/html; charset=utf-8

Sollte das nicht der Fall sein, dann findest du hier eine Möglichkeit diesen per htaccess zu setzen. Um nicht von irgendwelche Webserver-Konfigurationen abhängig zu sein, kannst du es auch so machen:



<?php





class SiteController extends CController


{





	public function init()


	{





		header('Content-Type: text/html; charset=utf-8');





	}





}





?>


Deine einzelnen Controller leitest du dann einfach von dieser Klasse ab und der header wird immer automatisch gesetzt.

Geht leider beides nicht, verwende ich ein öäüß bleibt die zeile im drop down feld leider leer

wahrscheinlich läuft da was schief bei Yii::t()

funktioniert es denn ohne Message Translation?

Glaub nicht mit,

<?php echo CHtml::dropDownList('suche', $_REQUEST['suche'], array(


		'1'=>Yii::t('Durchfuehrung', 'Alle Termine'),


        '2'=>'Termine mit möglicher Anmeldung',


		'3'=>Yii::t('Durchfuehrung', 'Termine in Vorbereitung'),


		'4'=>Yii::t('Durchfuehrung', 'Abgelaufene Termine'),


		));


?>

so bleibt die Zeile leider auch leer

das im Header hab ich gesetzt:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 


<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de"> 


<head> 


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


<meta name="language" content="de" /> 


<link rel="stylesheet" type="text/css" href="/esft/css/main.css" /> 


<link rel="stylesheet" type="text/css" href="/esft/css/form.css" /> 


<link rel="shortcut icon" href="favicon.png" type="image/png"> 


<link rel="icon" href="favicon.png" type="image/png"> 


<title>eSFT - Admin Durchfuehrung</title> 


</head>

geht aber leider auch nicht. Hatte von euch noch nie jemand Probleme damit?

In diesem Fall gibt können es nur zwei Sachen sein, warum es nicht klappt:

1. Deine Datei ist nicht UTF-8 codiert gespeichert

Besorg dir nen Texteditor, der die aktuelle Dateicodierung anzeigt und ändern kann. Unter Windows mach ich das z.B. mit Notepad2.

2. Der HTTP-Header wird nicht richtig gesetzt.

Im Firefox kannst du unter Ansicht/Kodierung schnell prüfen welche Codierung vom Browser erkannt wurde. Genauer kannst du das mit dem Live HTTP Headers Addon für Firefox rausfinden. (Achtung, das ist nicht der Seitenheader, sondern die Headerinfo einer HTTP-Antwort, normalerweise unsichtbar!)

Wenn das alles sauber läuft gibts auch garantiert keine Probleme mit den Umlauten. Ansonsten gilt alles was ich mal in dem Cookbookartikel zusammengetragen hab, den Y!! schon erwähnt hat:

http://www.yiiframew…oc/cookbook/16/

OK, hab ich gemacht, es war die Zeichcodierung in Eclipse, die war auf weiß der Geier was eingestellt, habs jetzt im Projekt und global in Eclipse auf UTF-8 eingestellt. Jetzt wird es auch bedingt richtig angezeigt, nämlich als eine Raute mit nem Fragezeichen drin anstatt dem ö. Die Codierung wird von IE7 (welche Wunder), FF und Chrome korrekt erkannt, auch automatisch, es ist überalle UTF-8 eingestellt.

Noch eine blöde Zwischenfrage aber warum funktioniert diese Zuweiseung nicht?



Yii::app()->session['testdata']['panels'][$header] = $body;


in $header und $body ist text enthalten, auch mit leerzeichen

Probier doch nochmal mit ner "frischen" View-Testdatei, die bloß ein paar Umlaute enthält. Grad bei alten Dateien, die vorher eine andere Codierung hatten, kann bei der Umwandlung einiges schiefgehen - je nachdem, wie "intelligent" der Editor ist.

Zur Session:

Hast du Yii::app()->session->open() gemacht? Wie lang kann $header werden? Ich bin nicht sicher, wie lang ein Array-Schlüssel in PHP maximal sein darf, könnte aber begrenzt sein.

Ich würde mal mit ein paar print_r($_SESSION) an verschiedenen Stellen schaun, was so in der Session gespeichert wurde.

das problem hatte ich leider auch… hab auch ewig rumgepfuscht, bis ich alles hatte:

  • Alle (nötigen) Dateien müssen im UTF-8-Format gespeichert sein
  • Alle Tabellen in der DB müssen im UTF-8-Format vorliegen! (bei mysql habe ich das hier: utf8_general_ci)

    Wichtig: wenn du den Zeichensatz der Spalten änderst, dann musst du alle Daten neu reinschreiben, da sonst das Problem mit der komischen Raute ergibt! MySQL speichert an dieser Stelle die Daten leider nicht im UTF-8-Format, sondern behält das alte bei…

  • Die Anwendung selbst muss als UTF-8 ausgeliefert werden.

Ich hoffe, ich habe alle Stellen erwähnt, sodass das keine Probleme mehr geben dürfte =)