PHP und UTF-8

  • HI
    Ich hab folgendes Problem:
    ich muss eine Mehrsprachige homepage gestalten und hab überlegt wie ich das am besten machen kann ...
    Ich hab mich entschieden, das mit PHP und XML (simpleXML) zu machen, weil ich das immer schon mal ausprobieren wollte ...
    so sieht das in der XML-Datei aus :
    <text>
    <deutsch>test-deutsch</deutsch>
    <englisch>test-englisch</englisch>
    <russisch>test-russisch</russisch>
    </text>
    will ich dann mit PHP auslesen und dann je nach sprachauswahl eben das je andere ...

    soweit kein Problem...

    jetzt ist mir aber aufgefallen, das ich russisch garnicht mit dem standart Zeichensatz darstellen kann und da hab ich mich auf die suche gemacht und im Internet nachgeforscht. da bin ich auf "UTF-8" gestossen.
    das funktioniert auch, in XML kann ich die zeichen so auch mit dem entsprechenden Editor anzeigen lassen...

    auch html-dateien die ich als ".htm.utf8" speichere gehen einwandtfrei

    aber sobald ich das eine PHP-Datei ist wird nichts brauchbares angezeigt...
    hab auch schon als htm.utf8 gespeichert und apache gesagt er solls als PHP-Datei erkennen, ging aber auch nicht

    liegt das an PHP ? oder stell ich mich einfach irgendwie dumm an?

    was kann man dagegen tun?

    oder gibt es sonst irgendwie eine Idee wie ich eine mehrsprachige Seite einigermassen geschickt bauen kann.

    Vielen Dank für eure Hilfe
    batzen

  • Moin!

    Binde doch den kompletten Head-bereich der HP als Template ein.
    Du legst für jede Sprache verschiedene "Kopfbereiche" als Text- oder HTML-Dateien an und lädst sie dazu, wenn PHP seine Berechnungen erledigt hat und mit der (HTML)-Ausgabe beginnt.

    Sollte klappen.

    G.a.d.M.

    Ronald

  • Hmm das versteh ich nicht ganz du meinst, das ich dann für jede Sprache dann den entsprechenden Zeichensatz, also für Deutsch dann iso-8859-1 und so weiter ?

    aber das hilft mir aber doch bei meinem Problem nicht wirklich weiter, da ich zwar das UTF-8 aus der XML-Datei mit utf8_decode() in iso-8859-1 umwandeln kann, aber das russisch nicht in iso-8859-5(glaub ich?)

    d.h. ich müsste dann alle verschiedene Zeichensätze in verschiedene XML-dateien legen was ich sehr unnschön fände, da wenn dann noch Chinesisch oder sonst was dazukommt ich dann 3 XML-Dateien hätte ...

    und wieso ist es denn nicht möglich php mit Daten im UTF-8-Format zu verwenden ?


    Danke schonmal für die antwort
    batzen

  • Machs doch mit klassischem PHP/HTML:

    G.a.d.M.

    Ronald

  • @sG|W00tkaeppi
    Ja das ist schon klar, so ähnlich hab ich das ja auch vor, bringt mir aber nichts mit meinem Problem mit den Zeichensätzen soweit ich das sehe ...

    mit deutsch und englisch hab ich ja kein Problem ...

    @ Ronald

    ja so hab ich das schon verstanden, aber:
    wenn ich kryllische(russisch) zeichensätze aus einer XML-Datei mit UTF-8 auslese kann ich die ja nicht in ISO-8859-5 umwandeln
    (PHP:)utf8_decode() wandelt nur UTF8-> ISO-8859-5 um

    deswegen bringt mir das so nicht weiter ...

    woran liegt es denn, das ich mit PHP keine UTF-8 Schriftzeichen anzeigen lassen kann ?

    batzen

  • Zitat von batzen

    wenn ich kryllische(russisch) zeichensätze aus einer XML-Datei mit UTF-8 auslese kann ich die ja nicht in ISO-8859-5 umwandeln
    (PHP:)utf8_decode() wandelt nur UTF8-> ISO-8859-5 um

    Das hab' ich jetzt nicht verstanden, aber wahrscheinlich denke ich anders, bzw. würde ich das Problem ohnehin völlig anders angehen.

    Ich habe eine viersprachige HP (französisch, englisch, deutsch und italienisch). Die komplette HP basiert sehr stark auf PHP und Templaten.
    Die HTML-Templates enthalten keinerlei Text, lediglich den Standard-HTML-Code, Grafiken, pp. und viele Platzhalter.

    Die HP-internen Links rufen immer eine 'main.php' auf, übergeben dabei die aufzurufende Seite und die gerade aktive Sprache.

    Das PHP-Script wählt anhand der gewählten Sprache die (Text)-Datei aus und liest die Texte in Varaiblen ein. Dann wird das zu der ausgewählten Seite gehörende Template geladen und gejoint, dabei werden die Platzhalter durch die Text in der ausgewählten Sprache ersetzt,

    Vorteil:
    - Die Seiten sehen in allen Sprachen optisch gleich aus, nur die Texte ändern sich.
    - auch HTML-Funktionen, pp. können über die Platzhalter mit übergeben werden.
    - für jede Sprache gibt es eine entsprechende Datei in der alle Texte für alle Seiten in dieser Sprache enthalten sind, beim Einlesen der Datei werden Texte, die nicht zu der aktuell aufgrufenen Seite gehören gleich ausgefiltert (damit das Einlesen schneller geht).
    - Texte, die identisch auf mehreren Seiten vorkommen, brauchen nur 1x in der Textdatei aufgeführt werden.

    Bei mir läuft es super gut. Auch sind jederzeit weitere und selbst exotische Sprachen damit schnell und übersichtlich zu integrieren.
    Man kann beim Erstellen der Texte in einer fremden Sprache die Textdateien einfach nebeneinander stellen und dann entweder manuell oder durch ein Programm Satz für Satz übersetzen, das Ergebnis paßt dann eigentlich immer.

    G.a.d.M.

    Ronald

  • naja eigentlich will ich das ja genauso machen, Templatesystem hab ich auch schon nur das ich eben den Inhalt alles in eine XML-Datei schreiben will und dann je nach dem das dann auch auslesen will, das sollte doch genauso sein.
    das funktioniert ja auch alles

    nur das ich eben irgendwie keine Russischen Inhalte mit PHP anzeigen lassen kann

    also wenn ich eine Datei *.htm.utf8 nenne wird das korrekt als russisch angezeigt aber wenn ich die dann umbenne in *.php.utf8 erkennt er den Zeichensatz irgendwie nimmer und ich weiss nicht warum hab schon diverse sachen in der PHP-ini Datei rumprobiert, aber ohne erfolg


    mein eigentliches problem ist nur: wie krieg ich das Russische aus der XML-Datei raus(naja rauskriegen is nich das problem) und kann das anzeigen lassen.

  • Da mußt du dann wohl auf die Antwort von einem XML-Profi warten, ich habe mich mit XML bislang noch nicht beschäftigt, da ich keine Notwendigkeit dafür gesehen habe.

    Ich kenne aber einige Projekte die mit XML gemacht sind und kann dazu nur sagen, das ich die Scriptstrukturen fürchterlich unübersichtlich finde. Vor allem bei der Fehlersuche wird man blöd, da man ständig in die Datei wechseln muß, um die Ursache für den Fehler zu finden.

    Da PHP aber eigentlich eine Programmiersprache zur Datenbankverwaltung ist, weiß ich nicht, ob es so gut ist, das mit XML zu vergewaltigen.

    G.a.d.M.

    Ronald

  • nein da hast du mich misverstanden

    auch wenn ich nix mit XML mache und nur html-Code habe

    wird der nicht richtig angezeigt, wenn er eine php-endung hat ...

    das problem ist :

    wie schaff ich das PHP mir russisch anzeigen kann ...

  • Das is der quelltext :

    HTML
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html;CHARSET=UTF-8">
    </head>
    <body>
    лфыв ащ фтывш лповф
    </body>
    </html>


    Das ist die ausgabe als .htm.utf8:

    Code
    лфыв ащ фтывш лповф


    Das ist die ausgabe als .php.utf8:

    Code
    »Ä˲ °É ÄÂË²È »¿¾²Ä
  • Hi,

    in der php.ini gibt es die Option default_charset.

    Die musst Du auf "utf8" setzten, dann funzt es.

    So long

    g.