Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Leidiges Thema Umlaute bzw. Charset

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Leidiges Thema Umlaute bzw. Charset

    Schon wieder brauche ich Hilfe. Die Suchfunktion hat mir zwar reichlich Themen angezeigt, nur wird das alles sehr unübersichtlich und hilft mir nicht genau weiter.

    Ich bin dabei eine Anzeige für eine Bildergalerie zu vereinfachen und möchte folgendes erreichen.
    Es existiert ein Skript, welches den Ordner 'bilder' überprüft. Werden dort Unterordner mit Bildern gefunden, sollen die jeweiligen Unterordner als Link aufgelistet werden. Z.B. Sommer2006, Schützenfest2010.
    Ich übergebe den Ordnernamen dann an ein weiteres Skript, welches mir die Bilder dann als Thumbs auf den Bildschirm verteilt. Soweit funktioniert alles.
    Da es sich um eine Seite eines Schützenvereins handelt, kommen in den Ordnernamen also auch 'ü' und so vor. Die Anzeige bei der Auflistung wird richtig angezeigt und auch die Übergabe, die man unten im Browser sehen kann zeigt ein 'ü' an. Wenn jetzt die Seite des Unterordners 'Schützenfest2010' geöffnet wird, wird der Name auch richtig übergeben, der wird als Überschrift angezeigt. In der Pfad-Anzeige des Browsers steht allerdings anstelle des 'ü' ein '%FC'. Da sich sämtliche Pfade zur Verarbeitung der Bilder auf den übergebenen Namen beziehen und das dann auch nicht richtig funktioniert, wird auch leider kein Bild angezeigt.

    Die Bilderordner lade ich einfach per ftp mit dem Total Commander hoch.

    Als Standard habe ich in der PHP.ini den Charset ISO-8859-1 eingestellt.

    Meine Frage wäre, wie ich das Problem am einfachsten lösen kann.
    Welcher Charset sollte man benutzen, ISO-8859-1 oder UTF-8, die Meinungen gehen stark auseinander.

    Ich hoffe, es ist nicht zu kompliziert beschrieben.

    Gruß
    HerrFrie


  • #2
    Die Suchfunktion hat mir zwar reichlich Themen angezeigt, nur wird das alles sehr unübersichtlich und hilft mir nicht genau weiter.
    Du musst die Artikel auch anklicken (!) und durchlesen! Mal ehrlich - viel kannst DU nicht recherchiert haben. denn quasi überall wird UTF-8 empfohlen.
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Zitat von HerrFrie Beitrag anzeigen
      Da es sich um eine Seite eines Schützenvereins handelt, kommen in den Ordnernamen also auch 'ü' und so vor.
      Diese Aussage klingt so, als ob da irgendeine zwingende Logik vorliegen würde ...
      Ist aber nicht so. Wenn du gleich dafür Sorge trägst, dass solche Sonderzeichen in Verzeichnis- und Dateinamen gar nicht vorkommen (bzw. nicht erlaubt werden), hättest du jetzt ein Problem weniger.

      Die Anzeige bei der Auflistung wird richtig angezeigt und auch die Übergabe, die man unten im Browser sehen kann zeigt ein 'ü' an. Wenn jetzt die Seite des Unterordners 'Schützenfest2010' geöffnet wird, wird der Name auch richtig übergeben, der wird als Überschrift angezeigt. In der Pfad-Anzeige des Browsers steht allerdings anstelle des 'ü' ein '%FC'.
      Natürlich, das muss so sein.

      Eigentlich wäre es deine Aufgabe gewesen, im Script dafür zu sorgen, dass Sonderzeichen korrekt kodiert werden, wenn du sie in den Kontext URL bringst.
      Falls du das versäumt hast, übernimmt es notfalls der Browser für dich.

      Da sich sämtliche Pfade zur Verarbeitung der Bilder auf den übergebenen Namen beziehen und das dann auch nicht richtig funktioniert, wird auch leider kein Bild angezeigt.
      Wo jetzt das eigentliche Problem liegt, wird aus dieser Beschreibung nicht deutlich.

      Kommentar


      • #4
        Es ist nicht so, als ob ich kein Thema angeklickt habe, bzw. durchgelesen habe. Ich finde nur, dass ich da nirgends wirklich schlau draus geworden bin. Z.B. habe ich bei Google auch einige Posts gefunden wo gesagt wird, dass standard mäßig Iso-8859-1 verwendet wird. In anderen Post steht dann das ganze mit UTF-8. Als nciht-Profi ist es dann schwer zu verstehen, was jetzt warum besser oder sinnvoller ist.

        Ich versuche mein Problem also nochmal anders zu erklären.

        - Ich möchte einen Bilderordner vom PC einfach nur hochladen, den Rest soll das Skript machen.
        - Ich würde dort gerne auch Dateinamen mit Umlauten verwenden, da ich diese Dateinamen dann direkt als Überschrift für die Bildergalerie nutzen möchte. Optisch finde ich ein 'Schützenfest' schöner als ein 'Schuetzenfest'.
        - Als Titel wird das Browserfenster mit 'Schützenverein' angezeigt, wenn ich als Standard utf-8 einstelle wird das nicht mehr angezeigt und ich weiß leider nicht, wie ich das dann hinbekomme.
        - Vielleicht habt ihr ja die Möglichkeit mir das ein wenig zu erklären, sodass ich das auch verstehe.

        Gruß
        HerrFrie

        Kommentar


        • #5
          Ok,
          habe gerade mal eine dummy-Erklärung gefunden, die mir schon mal soweit geholfen hat, dass ich jetzt verstehe warum eher utf-8 benutzt werden soll.

          ABER, heißt das jetzt, dass ich vorhandene Skripte/Seiten, auf denen Sonderzeichen vorkommen, neu als utf-8 abspeichern muß und es wird wieder ein ä,ö oder ü angezeigt, oder wird das schwieriger ?

          Kommentar


          • #6
            Ich habe jetzt noch einmal hier im Forum gesucht und bei den alten Beiträgen angefangen.

            Wenn ich das jetzt richtig verstanden habe, dann sollte es funktionieren, wenn ich als standard, bzw. im Skript utf-8 als charset auswähle und das skript auch als utf-8 abspeichere. Ich arbeite mit pspad und habe dort utf-8 als standard ausgewählt.
            Allerdings wird auf einer Testseite, bei der ich mir einfach äöü anzeigen lasse, nur ein komisches viereck angezeigt.

            Könnt ihr mir nicht noch einen Tipp geben ?

            Kommentar


            • #7
              Zitat von HerrFrie Beitrag anzeigen
              Wenn ich das jetzt richtig verstanden habe, dann sollte es funktionieren, wenn ich als standard, bzw. im Skript utf-8 als charset auswähle und das skript auch als utf-8 abspeichere.
              Das ist nur die halbe Miete. Du musst dem Browser auch mitteilen, dass dein Text in UTF-8 kodiert wurde. Sonst versucht der Browser, zu erraten, was du gemeint hattest. Das klappt manchmal, geht aber oft schief.

              Es hat sich bewährt, dabei eine Doppel-Strategie zu fahren:

              Zuerst sagt der Webserver (oder das PHP-Script, was dort läuft) per HTTP-Header, welche Kodierung verwendet wurde:

              PHP-Code:
              // allererste Ausgabe im Script:
              header('Content-Type: text/html; charset=utf-8'); 
              Dazu kommt eine Angabe im HTML-Header:
              Code:
              <html>
              <head>
              <meta http-equiv="content-type" content="text/html; charset=UTF-8">
              <!-- allererste Angabe im Header -->
              </head>
              Für XHTML tut es auch die Angabe der Kodierung in der XML-Deklaration:

              Code:
              <?xml version="1.0" encoding="UTF-8" ?>
              <html>
              <head>
              <!-- usw. -->
              Dies stellt sicher, dass auch eine "heruntergeladene" Seite noch richtig dargestellt werden kann.

              Ich arbeite mit pspad und habe dort utf-8 als standard ausgewählt.
              Eine aktuelle Version von PSPad sollte keine Probleme bereiten. Insbesondere speichert PSPad nicht diese dämliche BOM vor UTF-8-Texten, wie es diverse andere Tools tun.

              Allerdings wird auf einer Testseite, bei der ich mir einfach äöü anzeigen lasse, nur ein komisches viereck angezeigt.
              Das könnte daran liegen, dass du dem Browser nicht gesagt hast, dass die Testseite in UTF-8 kodiert wurde. Siehe oben.

              Es kann aber auch andere Ursachen haben, die man ohne den Text zu sehen, aber schlecht beurteilen kann. Beispielsweise kann die von dir eingestellte Schriftart (der Font) die entsprechenden Zeichen gar nicht eingebaut haben.

              Könnt ihr mir nicht noch einen Tipp geben ?
              Schau dir die heruntergeladene und abgespeicherte Testseite mit einem Hexviewer an. Der von dir verwendete TotalCommander kann dies in seinem eingebauten Anzeigetool mit Druck auf [F3]. Danach drückst du nochmal nur die [3] und du bist im Hex-Modus. Damit kannst du erkennen, ob und wie der Text wirklich kodiert wurde.
              Wenn man die Wurst schräg anschneidet, hält sie länger, weil die Scheiben größer sind.

              Kommentar


              • #8
                Danke,

                bei meiner Testseite habe ich gerade festgestellt, dass zwar der Pspad auf UTF-8 eingestellt war, er aber warum auch immer als Ansi gespeichert hat. Ich habe das nun umgestellt und jetzt funktioniert das auch. Habe das auch mit den Hauptseiten der restlichen HP gemacht und auch das wird jetzt richtig angezeigt.

                Jetzt muß ich erst mal weiter sehen, ob ich den Rest von meinem Problem selber in den Griff bekomme.
                Aber eine spontane Frage hätte ich noch. Gibt man den Charset im Header IMMER an, auch wenn man das z.B. in der .htaccess, bzw. php.ini schon als standard deklariert hat ?

                Gruß
                HerrFrie

                Kommentar


                • #9
                  [keine Antwort]

                  Ich sag mal so, UTF-8 ist auch mehr die Antwort auf allgemeine Zeichensatzprobleme bei der Anzeige. Was Dateisystem (und gerade auch die Übergabe via URL) anbelangt, gibt es da noch andere Überlegungen.

                  Die Hauptüberlegung:
                  - UTF-8-Sonderzeichen in der URL werden zwar großglächig unterstützt, sind aber genau genommen kein Standard. Das kann also immer zu Problemen führen
                  - URL-basierte dynamische Verzeichnisteile sind ein Sicherheitsrisiko in der Applikation. Damit kann es möglich werden, beliebige Files auf dem Server auszulesen. Ja, auch Logfiles oder Dateien, in denen Deine Zugriffsdaten auf die DB stehen etc.
                  - UTF-8 als Filesystemzeichensatz ist ebenfalls mit Vorsicht zu genießen

                  Summ Summarum:

                  - Du solltest Deine URLs auf Basiszeichen oder sogar IDs beschränken
                  - Über diese IDs kannst Du Deine Verzeichnisse ansprechen (das ist auch besser, wenn man dort mal eine Bezeichnung ändert)
                  - Die „optische“ webseitige Beschriftung des Ordners solltest Du als Metadaten (bspw. in einer Datenbank relational bezogen zum echten Verzeichnisnamen) abspeichern. Da drin kann dann noch mehr stehen (wer hats angelegt, ein Icon, eine Beschreibung etc.)
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Hallo Nikosch,

                    das mit den ID's habe ich schon öfters gesehen und fand das auch gut. Wie genau funktioniert das ? Ich habe mal 'url über id' und 'url verschlüsselung' als Suchbegriff probiert, habe da aber nicht das gefunden , was du erklärt hast. Wonach genau muß ich da suchen ?

                    Ich hoffe ich verstehe das richtig. Meine Skripte haben weiterhin die Bezeichnung index.html, galerie.php, ... und die id ist diesen dann nur zugeteilt ?

                    Gruß
                    HerrFrie

                    Kommentar


                    • #11
                      Zitat von HerrFrie Beitrag anzeigen
                      Hallo Nikosch,

                      Ich habe mal 'url über id' und 'url verschlüsselung' ...

                      $_GET

                      PHP: $_GET - Manual

                      Kommentar


                      • #12
                        Hallo Jens,
                        ich weiß schon, wie ich eine übergebene Variable greifbar mache, es geht mir eher darum, dass ich nicht sowas als Link übergebe :

                        PHP-Code:
                        http://www.sonstwas.de/?name=geheimskript.php 
                        sondern
                        PHP-Code:
                        http://www.sonstwas.de/?id=12 
                        Ich weiß aber nicht, wie das gemacht wird und wonach ich da wirklich suchen kann/soll.

                        Kommentar


                        • #13
                          Simple Lösung!

                          PHP-Code:
                          <?php
                          $var1 
                          $_GET['id'];

                          switch(
                          $var1) {
                              case 
                          1:
                                     include 
                          '222222.php';
                                     break;
                          }
                          ?>
                          Oder du hinterlegst die ID's in der Datenbank mit .php Dateien.
                          Dann liest du Sie aus und Includiest sie!

                          Kommentar


                          • #14
                            Hmm,

                            wenn meine Startseite also z.B. index.php heißt und ich im Menü oder so einen Link www.sonstwas.de/index.php?id=7 aufrufe, dann würde dein Code mit in der index.php stehen und über die case Anweisung müssten dann alle benutzten id's drin stehen, die dann mit include den richtigen Skripten zugewiesen werden.
                            War das so richtig ?
                            Ohne Datenbank könnte man aber über den Quelltext trotzdem die Dateien rausfinden, also wäre eine Datenbank besser ? Geht das auch ohne Datenbank mit einer eigenen Datei oder so ?

                            Somit gibt es also keine eigene Funktion oder Befehl für sowas und wird also komplett von Hand zugewiesen ?

                            Kommentar


                            • #15
                              Das geht auch über eine Datei per Datenbank.

                              Deine Beschreibung zu meinem Beispiel ist korrekt. Nachteil, du must bei jeder PHP Datei die du neu in deinen Ordner hochlädst diese Datei mit den Case Beispielen editieren.

                              Die Dateien die du mit der Datenbank bzw. mit der Switch/Case Funktionen füllst, musst du dann natürlich in der index.php bekannt machen per Include

                              Kommentar

                              Lädt...
                              X