Smarty Forum Index Smarty
The discussions here are for Smarty, a template engine for the PHP programming language.
Dedicated server web hosting provided by Guru-host.eu.
UTF8 aus der Datenbank
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Smarty Forum Index -> Language: German
View previous topic :: View next topic  
Author Message
franc
Smarty Rookie


Joined: 03 Jul 2009
Posts: 10

PostPosted: Tue Jul 19, 2011 12:17 pm    Post subject: UTF8 aus der Datenbank Reply with quote

Hallo,

ich habe eine Seite mit Smarty (Version 2.6.26) die mir aus einer MySQL 5 DB ein paar SELECT-DropDowns befüllt.
In der DB ist alles auf UTF8 gestellt (auch die einzelnen Felder), PHP 5.2.6 steht auf UTF8 und die betroffenen Dateien sind auch alle in UTF8 gespeichert.
Der Meta-Tag der ausgegebenen Datei steht auf utf-8, der Browser erkennt das auch und gibt selbiges an.

Nun enthält das "Bitte auswählen..." aus der SelectBox zwar noch den Umlaut (ä), aber die einzelnen Felder dann nicht mehr. Dort sind dann anstatt der Umlaute (im Firefox) die netten kleinen Karos mit Fragezeichen darin.

Wenn ich die Seite debugge habe ich, bevor die DB-Daten in die Smartybibliothek gehen, noch alle Umlaute.

Kann mir jemand einen Tipp geben, wo ich da noch schauen muss?
Ist Smarty 2.6.26 evtl. gar nicht auf UTF-8 ausgelegt oder gibt es einen Schalter?

Ich habe leider trotz Suche bisher keine Lösung genau dazu gefunden.

Danke.

franc
Back to top
View user's profile Send private message
jacz
Smarty Pro


Joined: 13 Nov 2010
Posts: 249

PostPosted: Tue Jul 19, 2011 12:30 pm    Post subject: Reply with quote

Smarty ist es egal, da Smarty innerhalb einer Applikation läuft die da bestimmend ist.

Es werden also nur Inhalte so verhackstückelt wie sie geliefert werden.

Kannst mal probieren ob das hilft {$meinevar|uft8_encode}
Back to top
View user's profile Send private message Visit poster's website
rodneyrehm
Administrator


Joined: 30 Mar 2007
Posts: 698
Location: Germany, border to Switzerland

PostPosted: Tue Jul 19, 2011 12:40 pm    Post subject: Reply with quote

Das ist schlicht nicht wahr. Smarty 2.x und 3.0 haben bei diversen Funktionen Probleme mit UTF-8. Erst Smarty 3.1 ist vollständig auf UTF-8 getestet.

Benutzt du die Funktion {html_options}? Dort wird intern smarty_function_escape_special_chars() verwendet, was htmlspecialchars aufruft. Allerdings ohne einen charset zu definieren. Laut PHP-Doku ist der default-charset ISO-8859-1. Vermutlich geht hier was in die Hose.

bau {html_options} mal mit {foreach} nach und schau ob das Problem immer noch existiert…
Back to top
View user's profile Send private message Visit poster's website
franc
Smarty Rookie


Joined: 03 Jul 2009
Posts: 10

PostPosted: Tue Jul 19, 2011 12:51 pm    Post subject: Reply with quote

jacz wrote:
...Kannst mal probieren ob das hilft {$meinevar|uft8_encode}

Ja das hilft in der Tat.

Wenn ich im php schreibe:

Code:
$smarty->assign('test', $wert_aus_der_db_mit_umlauten);


und im tpl:

Code:
<p>TEST:{$test|utf8_encode}</p>


spuckt mir der Brauser die Umlaute mit raus. Ohne das utf8_encode im Template macht er es nicht.
Ist das die Lösung?

Ich habe allerdings keine einfachen Variablen wie hier im Beispiel $test, sondern eine leicht geänderte function.html_options.php (aus plugins),
die ein Array entgegennimmt. Das kann ich nicht einfach so mit utf8_encode umwandeln, sonst habe ich als Select-Felder nur noch "Array" stehen.

Gibt es utf8_encode vielleicht auch für Arrays?
Habe dazu aber nichts gefunden.
Back to top
View user's profile Send private message
jacz
Smarty Pro


Joined: 13 Nov 2010
Posts: 249

PostPosted: Tue Jul 19, 2011 1:18 pm    Post subject: Reply with quote

Nein (http://php.net/manual/de/function.utf8-encode.php) , aber mach das doch im plugin in einer Schleife einmal durch.
Back to top
View user's profile Send private message Visit poster's website
U.Tews
Administrator


Joined: 22 Nov 2006
Posts: 4178
Location: Hamburg / Germany

PostPosted: Tue Jul 19, 2011 1:37 pm    Post subject: Reply with quote

Dein wirkliches Problem ist wohl dass Du zwar die Datenbank als UTF8 definiert hast, aber die Daten nicht im UTF8 Zeichensatz gespeichert wurden.
Back to top
View user's profile Send private message
franc
Smarty Rookie


Joined: 03 Jul 2009
Posts: 10

PostPosted: Tue Jul 19, 2011 1:53 pm    Post subject: Reply with quote

globe wrote:

...Benutzt du die Funktion {html_options}? Dort wird intern smarty_function_escape_special_chars() verwendet, was htmlspecialchars aufruft. Allerdings ohne einen charset zu definieren...


Ja, das habe ich, siehe oben.
Ausgerechnet!

Wenn ich in smarty_function_escape_special_chars aber $string = htmlspecialchars($string, ENT_COMPAT, "UTF-8"); setze, ist $string nach Aufruf von htmlspecialchars() einfach nur leer.

jacz wrote:

... mach das doch im plugin in einer Schleife einmal durch.


utf8_encode in der Schleife im Plugin ändert leider nichts.

U.Tews wrote:
Dein wirkliches Problem ist wohl dass Du zwar die Datenbank als UTF8 definiert hast, aber die Daten nicht im UTF8 Zeichensatz gespeichert wurden.


In der DB sehe ich aber (via QueryBrowser) alle Umlaute. Selbst wenn ich ein Feld mit Umlauten lösche, und dort wieder Umlaute einfüge, ist es das selbe Ergebnis.


Last edited by franc on Tue Jul 19, 2011 3:19 pm; edited 2 times in total
Back to top
View user's profile Send private message
jacz
Smarty Pro


Joined: 13 Nov 2010
Posts: 249

PostPosted: Tue Jul 19, 2011 2:10 pm    Post subject: Reply with quote

Quote:
utf8_encode in der Schleife im Plugin ändert leider nichts

Dann machst du etwas dort falsch. An richtiger Stelle macht es nichts anders als wenn du eine Smartyvar damit behandelts.

Querybrowser und ähnliche Teile verwenden teils diese oder ähnliche Funktionen auf Basis der Charset Einstellung der DB, hat nicht unbedingt etwas zu sagen.

Gibt dein Plugin einen komplett fomulierten HTML String aus, dann setz die Funktion da an.
Back to top
View user's profile Send private message Visit poster's website
franc
Smarty Rookie


Joined: 03 Jul 2009
Posts: 10

PostPosted: Tue Jul 19, 2011 2:18 pm    Post subject: Reply with quote

jacz wrote:
Quote:
utf8_encode in der Schleife im Plugin ändert leider nichts

Dann machst du etwas dort falsch. ...
Ich probiere es noch mal! Melde mich später... Danke einstweilen.
Back to top
View user's profile Send private message
franc
Smarty Rookie


Joined: 03 Jul 2009
Posts: 10

PostPosted: Tue Jul 19, 2011 3:16 pm    Post subject: Reply with quote

Quote:
...Wenn ich in smarty_function_escape_special_chars aber $string = htmlspecialchars($string, ENT_COMPAT, "UTF-8"); setze, ist $string nach Aufruf von htmlspecialchars()einfach nur leer.


Das stimmt aber nur, wenn in $string Umlaute enthalten sind.
Wenn dort nur ASCII-Zeichen drin stehen, geht der Inhalt nicht flöten.
Ist das vielleicht ein Indiz für irgendwas?

EDIT: Entschuldigt meine vielen Posting Korrkturen, ich habe da grad beim Editieren gründlich was verwechselt, bzw. den falschen Post geändert. Jetzt stimmt es aber wieder Smile
Back to top
View user's profile Send private message
rodneyrehm
Administrator


Joined: 30 Mar 2007
Posts: 698
Location: Germany, border to Switzerland

PostPosted: Tue Jul 19, 2011 3:36 pm    Post subject: Reply with quote

franc wrote:
Das stimmt aber nur, wenn in $string Umlaute enthalten sind.
Wenn dort nur ASCII-Zeichen drin stehen, geht der Inhalt nicht flöten.
Ist das vielleicht ein Indiz für irgendwas?


In dem Fall ist dein $string nicht UTF-8 kodiert.
Nur weil dein MySQL in UTF-8 speichert, bedeutet das übrigens noch nicht, dass dein PHP auch UTF-8 bekommt. Es gibt da noch Verbindungsoptionen, die das ändern könnten.

Bei MySQL wäre die erste Query: »SET NAMES "UTF8"« um sicherzustellen, dass du UTF-8 bekommst…
Back to top
View user's profile Send private message Visit poster's website
franc
Smarty Rookie


Joined: 03 Jul 2009
Posts: 10

PostPosted: Tue Jul 19, 2011 11:09 pm    Post subject: Reply with quote

globe wrote:
...Bei MySQL wäre die erste Query: »SET NAMES "UTF8"« um sicherzustellen, dass du UTF-8 bekommst…

Ja, damit klappt es! Super, danke.

Dabei habe ich doch in der php.ini und in der my.conf jeweils auf utf8 gestellt. Wenn ich das noch jemals richtig verstehen dürfte, das mit dem UTF-8...

Übrigens, den HTML-String in utf8_encode() einzupacken hat doch nicht funktioniert.
Back to top
View user's profile Send private message
franc
Smarty Rookie


Joined: 03 Jul 2009
Posts: 10

PostPosted: Wed Jul 20, 2011 2:26 pm    Post subject: Reply with quote

Hernach musste ich aber noch alle mit FPDF erstellten Strings in utf8_decode() einpacken, also z.B.:


Code:
$pdf->Cell(100, 20, 'Mittagstisch');
$pdf->TextWithDirection(10, 20, 'Geben Sie uns bitte Ihre E-Mail-Adresse oder Ihre Faxnummer, so können wir Ihnen immer den aktuellen Mittagstisch zuschicken.', 'D');
$pdf->MultiCell(135, 8, "Vegetarisch der Woche\n".$veg, 1, "L", 1);


wird zu:

Code:
$pdf->Cell(100, 20, utf8_decode('Mittagstisch'));
$pdf->TextWithDirection(10, 20, utf8_decode('Geben Sie uns bitte Ihre E-Mail-Adresse oder Ihre Faxnummer, so können wir Ihnen immer den aktuellen Mittagstisch zuschicken.'), 'D');
$pdf->MultiCell(135, 8, utf8_decode("Vegetarisch der Woche\n").utf8_decode($veg), 1, "L", 1);


Wundert mich aber, dass man das nicht irgendwie viel einfacher in FPDF selbst packen kann, aber so hab ich es gefunden unter:

http://kevinscomputer.wordpress.com/2008/09/12/utf-8-und-fpdf
Back to top
View user's profile Send private message
rodneyrehm
Administrator


Joined: 30 Mar 2007
Posts: 698
Location: Germany, border to Switzerland

PostPosted: Wed Jul 20, 2011 2:31 pm    Post subject: Reply with quote

FPDF selbst kann kein UTF-8. Aber wenn du auf fpdf.org in die scripts Ecke schaust, siehst du dort tFPDF.

das kann UTF-8, unicode Fonts, etc pp. Ich nutze das produktiv. Außer dass es immer noch FPDF bullshit API ist, hatte ich da nichts zu klagen…
Back to top
View user's profile Send private message Visit poster's website
franc
Smarty Rookie


Joined: 03 Jul 2009
Posts: 10

PostPosted: Wed Jul 20, 2011 3:05 pm    Post subject: Reply with quote

Ja, hatte ich vorhin auch entdeckt, aber die paar Verpackungen hab ich jetzt mit utf8_decode gemacht, mein PDF ist nämlich sehr primitiv und da kommt auch wohl kaum was dazu.

FPDF (1.7) ist bullshit?
Warum?
Ich bin da sehr froh darum!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Smarty Forum Index -> Language: German All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group
Protected by Anti-Spam ACP