Worte mit Umlauten werden nicht angezeigt

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

  • #16
    Zitat von Wasser_Wanderer Beitrag anzeigen
    Ich musste ja nur die ENT_HTML5, ENT_DISALLOWED und ENT_SUBSTITUTE in Single-Quotes setzen
    Nein, das ist Quatsch. ENT_HTML5 gibts zB. erst ab PHP 5.4. Das heißt du verwendest eine veraltete PHP-Version, die nicht mehr offiziell unterstützt wird. Schleunigst updaten oder anderen Hoster suchen. Mit solchen alten und unsicheren Versionen sollte man sich nicht abgeben. Das hat keine Zukunft und ist nur Zeitverschwendung.

    Kommentar


    • #17
      Die drei anderen Flags machen keine lebenswichtigen Sachen. ENT_HTML5 kodiert das einfache Anführungszeichen als ' statt als numerische Entität (sollte Browsern und so ziemlich egal sein), die beiden anderen Flags bestimmen, was die Funktion macht, wenn die Eingabe falsch kodierte (UTF-8-)Bytes enthält. Das sollte normalerweise natürlich auch nicht auftreten. Es ist aber ab PHP 5.4 denoch ganz praktisch, die Flags zu setzen, weil es das Standardverhalten von htmlspecialchars ist, bei solchen Fehlern ansonsten einen leeren String zu liefern.

      Also, bevor du die Flags in Anführungszeichen setzt (was Unsinn ist, auch wenn PHP das mit falscher Interpretation der Sachlage vorschlägt), lass sie einfach weg. ENT_QUOTES aber dennoch setzen.

      Ansonsten siehe natürlich hellbringer.

      Kommentar


      • #18
        Zitat von mermshaus Beitrag anzeigen
        was die Funktion macht, wenn die Eingabe falsch kodierte (UTF-8-)Bytes enthält. Das sollte normalerweise natürlich auch nicht auftreten. Es ist aber ab PHP 5.4 denoch ganz praktisch, die Flags zu setzen, weil es das Standardverhalten von htmlspecialchars ist, bei solchen Fehlern ansonsten einen leeren String zu liefern.
        Dieses Verhalten wäre eine Erklärung, warum Texte mit Umlauten als Ganzes nicht angezeigt wurden.

        @Wasser_Wanderer: Füge doch testweise ENT_IGNORE zum htmspecialchars()-Aufruf hinzu, also so:
        PHP-Code:
        function codiere($s) {
            return 
        htmlspecialchars($sENT_QUOTES ENT_IGNORE'UTF-8');

        Falls jetzt nur noch die Umlaute verschwinden oder komisch dargestellt werden, ist deine Variable $spieler nicht in UTF-8 kodiert.

        Zitat von Wasser_Wanderer Beitrag anzeigen
        hier die Fehlermeldungen:
        PHP-Code:
        Notice: Use of undefined constant ENT_HTML5 assumed 'ENT_HTML5' in \index.php on line  54... 
        Das heißt, deine weiter oben gemachten Angaben zur PHP-Version waren wohl nicht korrekt:
        Zitat von Wasser_Wanderer Beitrag anzeigen
        Auf dem Server läuft:
        PHP Version 5.5.9-1ubuntu4.9
        Das stellt leider auch deine weiteren Angaben infrage:
        Zitat von Wasser_Wanderer Beitrag anzeigen
        1. Das Problem tauchte aufeinmal auf (ca. 1 Monat)
        2. Es wurde an den Scripten nichts verändert
        Ich halte es für sehr unwahrscheinlich, dass dein Hoster vor kurzem auf eine (andere) PHP-5.3-Version geupdated hat.

        Zitat von Wasser_Wanderer Beitrag anzeigen
        PHP-Code:
        htmlspecialchars($sENT_QUOTES ENT_HTML5 ENT_DISALLOWED ENT_SUBSTITUTE'UTF-8'); 
        Soweit, so richtig.

        Zitat von Wasser_Wanderer Beitrag anzeigen
        Ich musste ja nur die ENT_HTML5, ENT_DISALLOWED und ENT_SUBSTITUTE in Single-Quotes setzen
        Soweit, so unsinnig. Setzt du die "unbekannten" Konstanten in einfache Hochkommas, werden aus NULLen Zeichenketten. Verknüpft mit dem Ganzzahl-Operator '|' (bitweises ODER), werden sie wieder zu Integers zwangskonvertiert. Da sie keine für PHP gültigen Zahlenwerte enthalten, macht PHP Nullen (integer(0)) daraus. Am Ende bleibt nur der Wert übrige, den die bekannte Konstante ENT_QUOTES hat, die Zahl 3.

        Das kannst du selbst nachprüfen:
        PHP-Code:
        // int(187) in aktuellen PHP-Versionen
        // int(3) in PHP vor 5.4.0 (+ Fehlermeldungen)
        var_dump(ENT_QUOTES ENT_HTML5 ENT_DISALLOWED ENT_SUBSTITUTE);

        // int(3)
        var_dump(ENT_QUOTES 'ENT_HTML5' 'ENT_DISALLOWED' 'ENT_SUBSTITUTE');

        // int(3)
        var_dump(ENT_QUOTES);

        // int(3)
        var_dump(3); 
        Letztendlich macht deine Spezialkonstruktion damit nichts anderes als ein einfaches
        PHP-Code:
        htmlspecialchars($cdataENT_QUOTES
        gemacht hätte -- und das in allen PHP-Versionen.

        Ich glaube, du sollstest vor weiteren Ratespielchen und Reparaturversuchen erstmal grundhaft feststellen, worauf du aufbaust.

        Außerdem für später:
        PHP-Code:
        <td colspan="3\" bgcolor=\"".$ergtab."\" height=\"25\"><b style=\"color:".$ergtab2."\">".codierung($spieler)."</b></td> 
        Gewöhnliche Zeichenketten solltest du immer in einfache Hochkommas setzen. Dann musst du die doppelten in den HTML-Attributen nicht extra "escapen".

        Ein Vorschlag für mehr Übersichtlichkeit:
        PHP-Code:
        printf(
            
        '<td colspan="3" bgcolor="%s" height="25"><b style="color:%s">%s</b></td>',
            
        codierung($ergtab),
            
        codierung($ergtab2),
            
        codierung($spieler)
        ); 
        Auch solltest du alles, was in CSS-Klassen ausgedrückt werden kann, wie Abmessungen, Text- und Hintergrundfarbe ins CSS verlagern. Das macht dein HTML übersichtlicher.
        Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

        Kommentar


        • #19
          @mermshaus:
          Die PHP-Version die ich angegeben habe, ist genau die, was in der PHP-Info steht:
          PHP Version 5.5.9-1ubuntu4.9


          System Linux powerc110.galaxy-gmbh-service.de 3.13.0-042stab108.2 #1 SMP Tue May 12 18:07:50 MSK 2015 x86_64 Build Date Apr 17 2015 11:41:17 ------------------------------------------------------

          Und mein beschriebenes Problem ist mir erst vor ca 1 Monat aufgefallen.
          Zu dem Zeitpunkt ca 19.06.2015 wurden alle Sonderzeichen/Umlaute absolut korrekt dargestellt.

          Welche PHP-Version davor auf dem Server lief, das ist mir nicht bekannt.

          Sicher sind da in der Programmierung handwerkliche Fehler drinne. Das ist mir klar.

          Dennoch danke für Eure Hilfestellungen.

          Gruss WW

          Kommentar


          • #20
            Zitat von Wasser_Wanderer Beitrag anzeigen
            Die PHP-Version die ich angegeben habe, ist genau die, was in der PHP-Info steht:
            PHP Version 5.5.9-1ubuntu4.9
            Dann würdest du aber wohl nicht die undefined constant-Notices bzgl. dieser Konstanten bekommen … das ist eigentlich unmöglich.

            Bau mal im selben(!) Script, in dem du auch das htmlspecialchars bzw. deine Funktion codierung aufrust,
            PHP-Code:
            var_dump(phpversion()); 
            ein – was gibt das aus …?
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #21
              @ wahsaga

              Ausgabe: string(16) "5.5.9-1ubuntu4.9"

              Local auf dem Windows-PC läuft: 5.3.8 Version

              Und auf dem lokalen Server tritt das Problem nicht auf.

              Gruss WW

              Kommentar


              • #22
                Zitat von Wasser_Wanderer Beitrag anzeigen
                Ausgabe: string(16) "5.5.9-1ubuntu4.9"

                Local auf dem Windows-PC läuft: 5.3.8 Version
                Also stammen die Fehlermeldungen von der (lokalen) 5.3.8-Version, aber die "verschluckten" Textteile gibts nur auf dem Server mit 5.5.9?

                Zitat von Wasser_Wanderer Beitrag anzeigen
                Und auf dem lokalen Server tritt das Problem nicht auf.
                Ich tendiere mehr und mehr dazu, dir einfach 'cp1252' als Parameter für die Zeichenkodierung zu empfehlen:
                PHP-Code:
                function codierung($s)
                {
                    return 
                htmlspecialchars($sENT_QUOTES ENT_IGNORE'cp1252');

                Das ist zwar keine gute Lösung, müsste aber bei deinen beiden PHP-Versionen zum gleichen Ergebnis führen.

                Im Client kommt dann zwar vermutlich immer noch UTF-8+Single-Byte-Mischmasch an, aber an so etwas sind Webbrowser ja gewöhnt.
                Zuletzt geändert von fireweasel; 24.07.2015, 16:00.
                Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                Kommentar


                • #23
                  Zitat von fireweasel Beitrag anzeigen
                  Also stammen die Fehlermeldungen von der (lokalen) 5.3.8-Version, aber die "verschluckten" Textteile gibts nur auf dem Server mit 5.5.9?
                  Genauso ist es.

                  Zitat von fireweasel
                  Ich tendiere mehr und mehr dazu, dir einfach 'cp1252' als Parameter für die Zeichenkodierung zu empfehlen:
                  PHP-Code:
                  function codierung($s)
                  {
                      return 
                  htmlspecialchars($sENT_QUOTES ENT_IGNORE'cp1252');

                  Das ist zwar keine gute Lösung, müsste aber bei deinen beiden PHP-Versionen zum gleichen Ergebnis führen.
                  Ich/wir haben die Zeichenkodierung auf: ISO-8859-1 gestellt.
                  Damit werden die Wörter mit Umlauten richtig und vollständig angezeigt.

                  Bei UTF-8 werden die Umlaute selbst falsch dargestellt.

                  Gruss WW

                  Kommentar

                  Lädt...
                  X