UTF8 Problem mit includierter Datei?
hawkmaster
- php
Hallo zusammen,
ich hatte vor einiger Zeit meine komplette Intranet Anwendung auf UTF8 umgestellt. D.h. alle PHP seiten laufen auf UTF8 und die MySQL DB auch.
In einer MySQL Tabelle stehen Strings für verschiedene Sprachen. Wenn hier Umlaute oder SOnderzeichen drin sind und ich diese später anzeige oder auswerte, habe ich keine Probleme, da ja alles UTF8 ist.
Jetzt habe ich noch (aus Altlasten) eine PHP Datei "deutsch.inc.php" in der auch Textstrings stehen die angezeigt werden.
z.b.
//$text_15 = "Dateigrösse";
$text_15 = "Dateigrösse";
Diese Datei wird includiert.
Jetzt habe ich folgendes Problem:
Steht der Text mit "ö" in der Datei wird der Text so angezeigt.
Dateigr�sse
Kodiere ich das "ö" mit ö
Dann wird er richtig angezeigt aber eine Berechnung der Stringlänge mit
mb_strlen($labelname[$i], 'utf8')
zeigt 16 Zeichen anstatt 10 an.
Irgendwie weiss ich nicht so recht weiter.
vielen Dank und viele Grüße
hawk
@@hawkmaster:
nuqneH
Intranet Anwendung […] PHP seiten […] MySQL DB […] MySQL Tabelle
Ich schenke dir 4 Bindestriche: ----
UTF8
Und noch einen für UTF-8: -
$text_15 = "Dateigrösse";
Bist du Schweizer? Ansonsten schreibt sich Dateigröße mit 'ß'.
mb_strlen($labelname[$i], 'utf8')
zeigt 16 Zeichen anstatt 10 an.
'D', 'a', 't', 'e', 'i', 'g', 'r', '&', 'o', 'u', 'm', 'l', ';', 's', 's', 'e'
16. Stimmt doch.
Die Auflösung der Entity-Referenz geschieht später. Viel später. Und an ganz anderer Stelle, nämlich im Browser.
Irgendwie weiss ich nicht so recht weiter.
Du musst deine Altlast "deutsch.inc.php" nochmal speichen, und zwar UTF-8-codiert.
Qapla'
Hallo Gunnar,
danke für deine Hilfe.
Ja jetzt habe ich es auch kapiert. Habe die Datei "deutsch.inc.php" nun im Editor geöffnet und als UTF-8 (man beachte den Bindestrich!) gespeichert.
Jetzt klappt es.
doch zurück zu deinen Deutschkurs (Oder Deutsch Kurs, oder Deutsch-Kurs?)
Ich weiss es führt jetzt weg zu meinem eigentlichen Anliegen, aber es interessiert mich doch:
Intranet Anwendung […] PHP seiten […] MySQL DB […] MySQL Tabelle
Ich schenke dir 4 Bindestriche: ----
Ich versuche eigentlich schon auch in Foren "sauber" und "richtig" zu schreiben.
Du meinst also es wäre schöner, besser und richtig so zu schreiben?
Intranet-Anwendung
PHP-Seiten
MySQL-DB
MySQL-Tabelle
oder aber alles in einem Wort.
Wo aber zieht nan dann die Grenze?
Ist es richig zu schreiben: Status Ansicht oder Statusansicht
oder
Deutschkurs Deutsch Kurs?
vielen Dank und viele Grüße
hawk
@@hawkmaster:
nuqneH
Du meinst also es wäre schöner, besser und richtig so zu schreiben?
Intranet-Anwendung
PHP-Seiten
MySQL-DB
MySQL-Tabelle
Ja.
oder aber alles in einem Wort.
Bei Intranetanwendung möglich, aber nicht unbedingt besser lesbar als die Variante mit Bindestrich.
Ist es richig zu schreiben: Status Ansicht
Nein.
Statusansicht
Ja. Auch möglich: Status-Ansicht, hier aber nicht unbedingt angebracht.
Deutschkurs Deutsch Kurs?
Du weißt es?
Qapla'
Hallo,
Intranet-Anwendung
PHP-Seiten
MySQL-DB
MySQL-Tabelle
oder aber alles in einem Wort.
alles in einem Wort verbietet sich, wenn einer der Bestandteile -so wie hier- eine Abkürzung ist.
Andernfalls ist es Geschmackssache, ob mit Bindestrich oder als *ein* Wort. Ich bevorzuge die Variante mit Bindestrich, wenn eines der Wortteile ein Fremdwort aus der Fachsprache ist.
Ist es richig zu schreiben: Status Ansicht oder Statusansicht
oder
Deutschkurs Deutsch Kurs?
Im Deutschen gibt es keine Getrenntschreibung zusammengesetzter Substantive. Mindestens ein Bindestrich fügt die Wortteile zusammen.
Im Englischen ist dagegen die Getrenntschreibung eher die Regel; Bindestriche werden selten verwendet, lückenlose Zusammenschreibung noch seltener.
So long,
Martin
@@Der Martin:
nuqneH
Im Englischen ist dagegen die Getrenntschreibung eher die Regel; Bindestriche werden selten verwendet, lückenlose Zusammenschreibung noch seltener.
Wobei sich hier britisches und amerikanische Englisch etwas unterscheiden. Im amerikanischen wird mehr zusammengeschrieben. Bsp: hometown statt home town.
Qapla'
Hallo,
Im Englischen ist dagegen die Getrenntschreibung eher die Regel; Bindestriche werden selten verwendet, lückenlose Zusammenschreibung noch seltener.
Wobei sich hier britisches und amerikanische Englisch etwas unterscheiden. Im amerikanischen wird mehr zusammengeschrieben. Bsp: hometown statt home town.
ja, das stimmt wohl, es gibt zahlreiche Beispiele dafür - sogar da, wo man sie nicht erwarten würde.
Die Briten schreiben ja auch "per cent" anstatt "percent".
Ciao,
Martin
PS: Ich glaube, heute hab ich das mit dem 'T' wieder im Griff ... ;-)
Mahlzeit hawkmaster,
Du meinst also es wäre schöner, besser und richtig so zu schreiben?
Intranet-Anwendung
PHP-Seiten
MySQL-DB
MySQL-Tabelle
Das meint Gunnar nicht nur - das ist auch so.
Wo aber zieht nan dann die Grenze?
Das brauchst Du gar nicht - Du brauchst es lediglich so zu machen, wie es in den amtlich geltenden Rechtschreibregeln festgelegt ist.
Ist es richig zu schreiben: Status Ansicht oder Statusansicht
Ersteres sind zwei vollkommen voneinander unabhängige Substantive, letzteres ein zusammengesetztes Hauptwort. Im Deutschen ist es dabei allgemein üblich, Bedeutungen wie "Die Ansicht eines Status" dergestalt zusammenzufassen, dass das eigentliche Hauptwort, um das es geht, als letztes Teilwort und das bzw. die beschreibenden Hauptwörter davor positioniert werden. [1]
In bestimmten Ausnahmefällen - z.B. wenn Uneindeutigkeiten bestehen oder wenn einzelne Teilwörter aus anderen Sprachen "importiert" wurden - ist es durchaus zulässig, die einzelnen Teilwörter mit Bindestrichen aneinanderzuhängen.
Die Wörter einzeln hinter ein ander zu schreiben (wie z.B. im Englischen) ist in jedem Fall falsch.
MfG,
EKKi
[1] Das wird einem normalerweise auch im Rahmen des Deutschunterrichts an einer weiterführenden Schule beigebracht ... SCNR, aber mich wundert immer wieder, wie wenig Grundlagenwissen in manchen Bereichen des Alltäglichen vorhanden ist.
N'Abend zusammen,
Literaturtipp dazu: G: Zwiebelfisch.
In seinen Büchern erklärt Bastian Sick mit Augenzwinkern und doch fundiert diese und andere Grammatikfragen und häufige Fehler.
Ich kann die Bücher nur wärmstens empfehlen. Sie sind lehrreich, ohne klugscheißerisch zu sein.
Viele Grüße
Thoralf
PS: Manchmal hasse ich (fremde) Laptoptastaturen. Da stimmt das Maß nicht.
Hi!
Irgendwie weiss ich nicht so recht weiter.
Du musst die Altlast umkodieren, anders geht es nicht (oder nur sehr unschön).
$text_15 = "Dateigrösse";
Steht der Text mit "ö" in der Datei wird der Text so angezeigt.
Dateigr�sse
Klar, ein ISO-8859-1-ö ist keine gültige UTF-8-Sequenz, weswegen du das � siehst.
//$text_15 = "Dateigrösse";
Dann wird er richtig angezeigt aber eine Berechnung der Stringlänge mit
mb_strlen($labelname[$i], 'utf8')
zeigt 16 Zeichen anstatt 10 an.
Genauer gesagt, im HTML-Umfeld wird es richtig angezeigt. Aber auch nur dann, wenn du die kontextgerechte Behandlung beim Einfügen unterlässt. Das ist fahrlässig, weil du auch die HTML-Sonderzeichen (mindestens <, & und teilweise ") berücksichtigen musst. Wenn du diese gleich HTML-gerecht notierst, hast du das gleiche Problem wie beim ö, denn das sind nun mal 6 Zeichen statt einem. Deswegen predige ich ja dauernd, Rohdaten zu verarbeiten und nicht irgendwelche schon für später aufbereiteten.
Lo!
Hallo dedlfix,
danke dir für deine Hilfe,
Du musst die Altlast umkodieren, anders geht es nicht (oder nur sehr unschön).
Du meinst das beste wäre es ich würde gleich alle Sprach Strings in die DB Tabelle packen?
Deswegen predige ich ja dauernd, Rohdaten zu verarbeiten und nicht irgendwelche schon für später aufbereiteten.
Was meinst du hier mit "Rohdaten"?
Also das "ö" so in der Sprachdatei lassen und nicht "ö"?
vielen Dank und viele Grüße
hawk
Hallo,
Du musst die Altlast umkodieren, anders geht es nicht (oder nur sehr unschön).
Du meinst das beste wäre es ich würde gleich alle Sprach Strings in die DB Tabelle packen?
Ich vermute, er meint einfach, dass Du Deine ISO-Altlas in eine UFT-8 Datei umwandeln sollst. Also die Datei in einem Editor als ISO-xy öffnen und dann als UTF-8 wieder speichern. Der Editor muss das natürlich unterstützen ... Ob es in deinem Fall Sinn macht, Texte in die DB auszulagern, kann man ohne weitere Angaben schlecht einschätzen - ist aber nicht unbedingt nötig.
Deswegen predige ich ja dauernd, Rohdaten zu verarbeiten und nicht irgendwelche schon für später aufbereiteten.
Also das "ö" so in der Sprachdatei lassen und nicht "ö"?
Du hast es erfasst ;)
Gruß,
luti
Hi!
Du musst die Altlast umkodieren, anders geht es nicht (oder nur sehr unschön).
Du meinst das beste wäre es ich würde gleich alle Sprach Strings in die DB Tabelle packen?
Ich meine nur, dass du die ISO-8859-1-kodierte Datei nach UTF-8 umkodieren musst, wenn du sie in einem UTF-8-Umfeld verwenden willst. Das Problem ist, dass du Anweisungen (Variablendeklarationen) mit Daten hast. Ein Output-Buffer nützt dir nichts, weil du keine Ausgaben hast und die Variablen ja einzeln weiterverarbeiten willst. Die Datei einlesen, utf8_encode()ieren, und dann mit eval() interpretieren ist ein möglicher Workaround aber ein unschöner.
Deswegen predige ich ja dauernd, Rohdaten zu verarbeiten und nicht irgendwelche schon für später aufbereiteten.
Was meinst du hier mit "Rohdaten"?
Also das "ö" so in der Sprachdatei lassen und nicht "ö"?
Genau, ein ö. Aber eins in der von dir benötigten (Zeichen-)kodierung.
Lo!