Vollständige Version anzeigen : Zend_Form: setLabel und Umlaute
Servus,
könnt ich mir sagen, wie ich es hinbekomme, dass Umlaute korrekt angezeigt werden... also:
$input->setLabel('* Straße:');wirklich als "Straße" angezeigt wird?
KingCrunch
18.04.2008, 19:29
In utf-8 kodieren, den Browser per header und/oder meta-Tag mitteilen, dass utf-8 verwendet wird und auf "ß" drücken?
Edit:
Standardmässig wird alles, was von irgendeinem View-Objekt zurück geliefert wird, von htmlspecialchars() (http://de3.php.net/htmlspecialchars) kodiert. Seit PHP5.2.3 gibt es den 4ten optionalen Parameter, der bereits existente Entities unberührt lässt, dieser Parameter wird aber von der Ausgabefilterung des View-Objektes nicht berücksichtigt.
Du kannst nun den Filter durch einen eigenen ersetzen, oder wirklich (und das lege ich wirklich nahe ;)) die Kodierung so ändern, dass du direkt die jeweiligen Sonderzeichen verwenden kannst. Methoden zur Manipulation des Filters findest du in der API-Dokumentation zur View_Abstract-Klasse (http://framework.zend.com/apidoc/core/Zend_View/Zend_View_Abstract.html). Im Manual sit dies etwas ungenügend dokumentiert.
Eine Alternative für dich mag sein, dass du den Filter durch htmlentities() (http://de3.php.net/manual/de/function.htmlentities.php) ersetzt und dann "ß" statt die Entität verwendest. In dem Fall sollte das View-Objekt selbst daraus ein "$szlig;" machen.
Der Vorteil von utf-8 an der Stelle ist, dass bei sprachabhängigen Sonderzeichen der Zeichensatz die Dekodierung übernimmt. Du musst also wirklich nur noch das Zeichen ("ß") eintippen und jeder Browser, der utf-8 kann, wird es erkennen. Bei sprachbezogenen Zeichensätzen kann es nämlich vorkommen, dass dort das "ß" nicht existiert. Aus dem Grund wurden die Entitäten eingeführt, indem der Browser dafür sorgt, dass er das korrespondiere Zeichen zur Entität findet. Bei Verwendung von utf-8 allerdings gibt es nur noch eine handvoll Zeichen, die eine Sonderbedeutung haben.
Gehört zum Thema Zeichenkodierung: http://de.selfhtml.org/html/allgemein/zeichen.htm
Gleich der erste Satz sagt alles: http://de.selfhtml.org/html/allgemein/zeichen.htm#umlaute
Über die Suche findest du eine Menge an Beiträgen zu diesem Thema. (Suche nach "utf8")
Der King war schneller...
Ich muss doch iwie einstellen können, dass das Kaufmanns-Und nicht ersetzt wird? - Ich kann doch nicht einfach "ö" eingeben, sondern "ö"...?
Hat auch (m.E.n) nichts mit Zeichenkodierung zu tun; muss doch die Option geben bspw. reines HTML für die setLabel()-Funktion einzustellen?!
Btw: gleiches Problem bei ->setValue()... :|
Bleistift
18.04.2008, 19:40
Ich kann doch nicht einfach "ö" eingeben, sondern "ö"...?
Wenn das Encoding stimmt, kannst du das sehr wohl... :rolleyes:
Wenn das Encoding stimmt, kannst du das sehr wohl...
Das will ich wohl meinen...
Lies bitte nochmal den ersten Satz auf dieser Seite: http://de.selfhtml.org/html/allgemein/zeichen.htm#umlaute
Oder besser noch ich zitiere:
Wenn Sie Kodierungen wie ISO 8859-1 oder UTF-8 verwenden, können Sie die deutschen Umlaute direkt in Ihrem Editor eintippen.
Das will ich wohl meinen...
Lies bitte nochmal den ersten Satz auf dieser Seite: http://de.selfhtml.org/html/allgemein/zeichen.htm#umlaute
Oder besser noch ich zitiere:
Ich glaube, Ihr versteht nicht, was ich meine... ich möchte unter keinen Umständen
$input->setLabel('* Straße:');in meinem Quelltext haben. Gibt einige FTP-Programme, die mir das dann zerschießen...
Habe nun auch:
$this->view->setEncoding('UTF-8'); gesetzt; aber bringt nicht sehr viel..
Ich glaube, Ihr versteht nicht, was ich meine... ich möchte unter keinen Umständen
Versteh du uns nicht falsch, wir wollen dir nichts Böses, sondern dir nur zeigen das zu 100% funktioniert. Du ersparts dir damit in Zukunft viel Arbeit und Ärger, wenn du nur ein paar kleine Punkte beachtest.
in meinem Quelltext haben. Gibt einige FTP-Programme, die mir das dann zerschießen...
Wenn das wirklich passieren sollte, dann tausche das Programm.
gesetzt; aber bringt nicht sehr viel..
Die Datei ebenfalls im UTF-8-Format gespeichert?
Auch im HTML nicht vergessen: http://de.selfhtml.org/html/kopfdaten/meta.htm#zeichenkodierung
Die Datei ebenfalls im UTF-8-Format gespeichert?
Auch im HTML nicht vergessen: http://de.selfhtml.org/html/kopfdaten/meta.htm#zeichenkodierung
ja... finds einfach seltsam... -.-
Und nicht falsch interpretieren: bin glücklich über die Hilfe hier ;)
Hmm, könnt ihr mir vielleicht sagen (vllt Beispielcode), wie ichs hinbekomme, dass
$input->setLabel('* Straße:');
auch korrekt angezeigt wird bei der Ausgabe? - Komme einfach nicht auf eine Lösung :(
KingCrunch
19.04.2008, 14:12
Auch wenn ich dir nahe lege keine Entitäten direkt in den Source-Code zu schreiben und stattdessen auf einen qualifizierteren FTP-Client zu wechseln ;), kannst du den View-Filter (http://framework.zend.com/apidoc/core/Zend_View/Zend_View_Abstract.html#setFilter) entfernen.$view->setFilter(null);
Auch wenn ich dir nahe lege keine Entitäten direkt in den Source-Code zu schreiben und stattdessen auf einen qualifizierteren FTP-Client zu wechseln
Da kann ich dem King nur zustimmen!
Hmm, könnt ihr mir vielleicht sagen (vllt Beispielcode), wie ichs hinbekomme...
Hast du auch alle Schritte beachtet?
Datei in UTF-8 gepspeichert
Encoding im View auf UTF-8 (Zend_View Optionen (http://framework.zend.com/manual/de/zend.view.html#zend.view.introduction.options) oder die PHP-eigene Funktion "header (http://de2.php.net/manual/de/function.header.php)")
Und im Head-Bereich deines HTML-Dokumentes auch das entsprechende Meta-Element gesetzt (http://de.selfhtml.org/html/kopfdaten/meta.htm#zeichenkodierung)
Hier noch ein Ansatz:
Ein Blick in den Quellcode des Label-View Helpers hätte dir auch schon die Lösung gebracht: http://framework.zend.com/svn/framework/trunk/library/Zend/View/Helper/FormLabel.php
Kann man dann ganz leicht über Dekoratore festlegen:
$form->setElementDecorators(array(
'ViewHelper',
array('Label', array('escape' => false))
));
"Beispiel 15.3. Dekoratore für alle Elemente setzen" - http://framework.zend.com/manual/de/zend.form.forms.html#zend.form.forms.elements.glob al.decorators
Ausdrückliche Empfehlung bleibt trotzdem die Anwendung einer richtigen Zeichenkodierung!
Die Sache ist nicht unbedingt die Geschichte mit den Entitäten im Source-Code sondern auch die Tatsache, dass Wörter wie "München" in der Datenbank als "München" eingetragen sind. Und genau hier liegt eben das Problem: die werden im Input-Feld bspw. als "München" angezeigt... und da bringen Eure Tipps komischerweise nicht viel.
Kaiuwe: ja, alle 3 Punkte sind bei mir der Fall...
Edit: Wenn ich in die Datenbank direkt "München" eintrage und das dann ausgeben lasse i.d.F.: $this->view->city = Zend_Registry::get('auth')->getIdentity()->city; bekomme ich eine leere Ausgabe...
KingCrunch
19.04.2008, 17:01
Die Sache ist nicht unbedingt die Geschichte mit den Entitäten im Source-Code sondern auch die Tatsache, dass Wörter wie "München" in der Datenbank als "München" eingetragen sind. Und genau hier liegt eben das Problem: die werden im Input-Feld bspw. als "München" angezeigt... und da bringen Eure Tipps komischerweise nicht viel.Rüschtüg, aber: Wer kommt denn auf die Idee Strings mit HTML-Entitäten in einer Datenbank zu speichern?
Edit: Wenn ich in die Datenbank direkt "München" eintrage und das dann ausgeben lasse i.d.F.: Die Identity ist regulär kein Objekt
bekomme ich eine leere Ausgabe...Da würd ich den Fehler erstmal wo anders suchen
$view->setEncoding('UTF-8');
Daran lag die Geschichte mit der leeren Ausgabe.
Bzgl. Entitäten in der DB: ich baue grade ein System mit Zend auf einer vorhandenen DB auf ... und da sind die Dinge so drin :/
ethan_hunt
19.05.2010, 23:19
Ouh Mann,
mir eben auch passiert.
Es hilft auch, wenn die DAteien UTF-8 Kodiert sind... :headbang: :eek:
vBulletin® v3.6.12, Copyright ©2000-2010, Jelsoft Enterprises Ltd.