Funktion funktioniert nur lokal

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

  • Funktion funktioniert nur lokal

    Hallo zusammen,

    ich bin total verwirrt. Vielleicht hat jemand eine Idee, also mein Problem.
    Habe bei mir xampp eingerichtet. Nun hab ich eine Seite mit Datenbank erstellt und einen Administrationsbereich.
    Wenn ich einen Datensatz anlege werden die Textfelder mit htmlspecialchars() umgewandelt und in die DB gespeichert. Unter dem Localhost wird dann aus einem ü ein ü -> Alles korrekt
    Wenn ich die Seite auf den Server schiebe und nichts verändere dann bleibt das ü ein ü. Das passiert mit allen Sonderzeichen und Umlauten.

    Nun wenn ich einfach
    Code:
    echo htmlspecialchars("öäÖäÄ");
    mal eingebe dann wird online im Quelltext nur die Umlaute ausgegeben, aber nicht die HTML Elemente.


    Ein anderes Problem, was nichts mit htmlspecialchars zu tun hat, habe ich mit Formularen.
    Meine Formularfelder haben alle einen Namen mit eckigen Klammern, z. B. field[meinname], oder field[text]. Unterm localhost kann ich ein Array aufrufen, so:
    Code:
    $name = $_POST["field"]["meinname"];
    $text = $_POST["field"]["text"];
    Das funktioniert einwandfrei.

    Nun auf dem Server geht das nicht, da liegen dann die Felder in einem etwas anderen Array
    Code:
    $name = $_POST["field"][0];
    $text = $_POST["field"][1];
    Mein erster gedanke war dass die PHP Version nicht stimmt. Aber auf meinem localhost habe ich die 5.2.9 und auf dem Server die 5.2.1. Die htmlspecialchars() Funktion gibt es doch schon seit PHP4

    Jemand eine Idee? Kann man diese Funktion irgendwie deaktivieren oder aktivieren? Das Problem hatte ich noch nie, und ich setze oft die Funktion ein?

    Oder kann es an der Codierung des Dokumentes liegen?

    Über einen Tip würde ich mich freuen

    Gruß

    Daniel

  • #2
    1:
    Ein utf-8 ü ist ganz was anderes als ein iso-8859-15 ü. Verwende die richtigen Zeichensätze, dann brauchst du deine Umlaute auch nicht umzuformen.

    2:
    Wenn Postdaten einen numerischen Index bekommen, dann läuft bei der Formularerstellung schon was schief.
    Wir werden alle sterben

    Kommentar


    • #3
      Hi,

      danke für deine Antwort.
      Mir ist schon klar dass der Zeichensatz richtig gesetzt sein muss. Das ü wird auch korrekt ausgegeben. Nur ich speicher die Eingaben in einer Datenbank, da soll nicht das ü sondern ein ü drin stehen. Das funktioniert unter localhost mit htmlspecialchars(). Aber unter dem Server im Internet geht das nicht.
      Genau wie mit dem Formular.

      ääähm. Hab grade mal nen Test gemacht.
      Also auf Windows PC mit Xampp und als Bearbeitungsprogramm pspad funktionierts einwandfrei unter localhost.

      Nun bin ich unter MAC OS X und localhost und als Bearbeitungsprogramm eclipse. Dort geht es nun auch nicht mit der htmlspecialchars Funktion.

      Und auf dem Server im Internet geht es auch nicht?

      Wo ist denn der Unterschied zwischen localhost Windows und MAC? Wenn beide die gleiche PHP Version haben? verstehe ich nicht
      Zuletzt geändert von carlos1985; 26.09.2009, 09:58.

      Kommentar


      • #4
        Der pspad verwendet iso-8859-2 und eclipse utf-8 als Standard.
        Nur ich speicher die Eingaben in einer Datenbank, da soll nicht das ü sondern ein ü drin stehen.
        Das ist eine (sorry) dumme Idee.


        Mache dich über Zeichensätze und ihre Verwendung kundig.
        Wir werden alle sterben

        Kommentar


        • #5
          Zitat von carlos1985 Beitrag anzeigen
          Mir ist schon klar dass der Zeichensatz richtig gesetzt sein muss. Das ü wird auch korrekt ausgegeben. Nur ich speicher die Eingaben in einer Datenbank, da soll nicht das ü sondern ein ü drin stehen.
          HTML-Entities haben in der Datenbank nix verloren. Warum willst du das machen?

          Kommentar


          • #6
            OK, das sehe ich ein. Wenn die Programme verschiedene Zeichensätze verwenden. Hab zwar im PSPad unter Format die Dateien auf utf-8 gesetzt, aber anscheinend wird das nicht übernommen.
            Aber, ich habe ja keine Probleme mit dem Anzeigen und darstellen von Sonderzeichen.
            Momentan werden die sonderzeichen, auch das ü, in der Datenbank als ü gespeichert und als ü auf der Seite angezeigt. Wenn ich aber nun die Datenbank auslese, und den Inhalt mit htmlspecialchars ausgebe sollte doch im Quelltext ein ü herauskommen, oder?
            Genauso wenn ich aufrufe:
            Code:
            echo htmlspecialchars("ü");
            Aber die Funktion scheint nichts zu machen, jedenfalls werden die Zeichen nicht verändert? Liegt das auch am Zeichensatz?


            Zitat von h3ll Beitrag anzeigen
            HTML-Entities haben in der Datenbank nix verloren. Warum willst du das machen?
            Also eigentlich haben ich von anfang an die Sonderzeichen in der Datenbank gespeichert. Dann funktionieren aber meine links nicht, denn aus einem Feld wird dann ein Link generiert, aber ein ü im Link ist nicht schön. Und wenn ich im Tex ein ü habe kann ich einmal die Ausgabe im HTML Quelltext vernünftig machen und das Zeichen beim ausgeben ersetzen. Denn Sonderzeichen werden irgendwie auf dem Server nicht umgewandelt. Auch mit str_replace bekomme ich die nicht ersetzt. Die ü bekomme ich mit str_replace ersetzt. Dann funktioniert alles.
            Zuletzt geändert von carlos1985; 26.09.2009, 10:26.

            Kommentar


            • #7
              Um Parameter in URLs zu escapen, verwende urlencode() oder bau das Query mit http_build_query().

              Und warum sollte htmlspecialchars() ü in ü konvertieren? Steht doch gar nicht so im Handbuch.

              Kommentar


              • #8
                So macht das wenig Spass....

                Warum:
                Du triffst massig Fehlannahmen. Oder baust logische Ketten mit Lücken. Es ist schwerer Leuten in ihren Fehlannahmen zu korrigieren, als was "neues" zu erklären. Doppelte Arbeit doppelte Anstengung. Erst aus dem Kopf prügeln und dann was neues rein prügeln. Klar lässt sich niemand gerne was aus dem Kopf prügeln, von daher ist auch mit heftigem Wiederstand zu rechnen.


                Beispiele:
                Hab zwar im PSPad unter Format die Dateien auf utf-8 gesetzt, aber anscheinend wird das nicht übernommen.
                Ungeprüfte Annahme!
                Beweise es oder vergiss es.
                Und nein: pspad funktioniert. du machst was anderes falsch.


                Wenn ich aber nun die Datenbank auslese, und den Inhalt mit htmlspecialchars ausgebe sollte doch im Quelltext ein ü herauskommen, oder?
                Du meinst ein natives ü, oder?
                Nein!
                1. du verwechselst htmlspecialchars() mit htmlentities()
                2. du ignorierst, dass beide Funktionen mehrere Parameter haben

                Denn Sonderzeichen werden irgendwie auf dem Server nicht umgewandelt. Auch mit str_replace bekomme ich die nicht ersetzt.
                str_replace ist wie alle php String Funktionen standardmäßig auf iso-8859-1 geeicht. Beachte die zusätzlichen Parameter und auch die mb_*() Funktionen.


                Vorschlag:
                1. den Content-type Header auf den gewünschten Zeichensatz stellen
                2. den HTML HEAD META Tag auf den gewünschten Zeichensatz stellen
                3. das Formular auf den gewünschten Zeichensatz stellen
                4. die Datenbank auf den gewünschten Zeichensatz stellen
                5. die Tabellen auf den gewünschten Zeichensatz stellen
                6. die Tabellen Spalten auf den gewünschten Zeichensatz stellen
                7. die Datenbank Verbindung auf den gewünschten Zeichensatz stellen

                Und dann beobachtest du den "Datenstrom"!
                Überall wo Ausgaben ins HTML stattfinden verwendest du htmlspecialchars() mit 3 Parametern. Und das unmittelbar vor der Ausgabe.
                Wir werden alle sterben

                Kommentar


                • #9
                  stimme combie ausnahmslos zu
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Kommentar


                  • #10
                    Danke für eure Antworten.

                    also ich mach es jetzt so, die Sonderzeichen landen in der datenbank und werden so gespeichert und ausgegeben. Für die Links nehme ich dann htmlentities.

                    Was mich halt verwirrt ist die Tatsache, dass die Funktion htmlspecialchars unter Windows und nem localhost mit sowie ohne Parameter aus einem ü ein ü macht aber unter mac nicht. Habe jetzt alle aufrufe von htmlspecialchars in htmlentities geändert und es funktioniert auf dem Server.

                    Ich weiß leider nicht was ich zwischen eclipse und pspad falsch mache. Wenn ich jetzt unter eclipse eine Datei in ISO erstelle und die dann im pspad aufmache sind die Sonderzeichen trotzdem alle weg, bzw. anders. Stell ich in Pspad in einer Neuen Datei auf utf-8 und öffne die dann in eclipse ist auch wieder alles durcheinander.
                    Wahrscheinlich ist es nicht so gut die Formate durcheinander zu bringen.

                    Und das mit dem Formular ist auch so eine Sache. Das wird doch nicht am Zeichenformat liegen?

                    Kommentar


                    • #11
                      Was mich halt verwirrt ist die Tatsache, dass die Funktion htmlspecialchars unter Windows und nem localhost mit sowie ohne Parameter aus einem ü ein ü macht aber unter mac nicht.
                      Beachte die Zeichensätze, dann siehst du auch das Warum!
                      Und das hat nichts mit Windows oder Mac zu tun.


                      Habe jetzt alle aufrufe von htmlspecialchars in htmlentities geändert und es funktioniert auf dem Server.
                      Ohje....
                      Ich dachte, ich hätte mich klar genug ausgedrückt und du inzwischen das Handbuch gelesen.

                      Also nochmal im Klartext:
                      Wenn die Zeichensätze der Daten und der gewünschten Ausgabe übereinstimmen, braucht es kein htmlentities()!
                      htmlspecialchars() ist dann völlig ausreichend.

                      Und das mit dem Formular ist auch so eine Sache.
                      Ich sehe kein Formular!
                      In meiner Vorschlags Liste steht was du tun sollst.


                      Das wird doch nicht am Zeichenformat liegen?
                      Das Wort "Zeichenformat" ist mir in dem Zusammenhang nicht bekannt.
                      Zeichenformat !== Zeichensatz

                      Wahrscheinlich ist es nicht so gut die Formate durcheinander zu bringen.
                      KA, was du da mit Format meinst, aber durcheinander ist nie gut. Zumindest nicht, wenn es zu solchen Verwirrungen führt.
                      Wir werden alle sterben

                      Kommentar

                      Lädt...
                      X