Jan K.: funktion um php sensibele zeichen zu entschärfen?

Hallo zusammen,

ich teste grad mein PHP Script durch, daß aus Formularfeldern gefüttert wird. Nun bin ich schon beim fünften Zeichen angelangt, das ein Warning in meinem Script verursacht. Gibt es eine funktion, die sensibele Zeichen austauscht, oder muss ich die alle einzeln erstzen?

Dann noch eine Frage zur Zeichenersetzung. Wenn ich als dokumenttyp UTF-8 verwende, wie sieht dann der ersatzcode aus?

$_POST["newmenu"]=str_replace("|","|",$_POST["newmenu"]);
Schmeisst mir bei utf-8 dokument als ersatzeichen auch wieder | raus. Sieht der Ersatzcode bei UTF-8 irgendwie anders aus?

Gruß,

Jan

  1. hi,

    ich teste grad mein PHP Script durch, daß aus Formularfeldern gefüttert wird. Nun bin ich schon beim fünften Zeichen angelangt, das ein Warning in meinem Script verursacht.

    Wie das?
    Welches Zeichen, bei welchem Code?

    Gibt es eine funktion, die sensibele Zeichen austauscht, oder muss ich die alle einzeln erstzen?

    Das kommt zunächst mal auf die definition von "sensible Zeichen" an.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. else {
      $_POST["newmenu"]=str_replace("|","|",$_POST["newmenu"]);
      $_POST["newmenu"]=str_replace("/","/",$_POST["newmenu"]); $_POST["newmenu"]=str_replace("?","?",$_POST["newmenu"]);  $_POST["newmenu"]=str_replace("*","*",$_POST["newmenu"]);
      $_POST["newmenu"]=str_replace(":",":",$_POST["newmenu"]);
      $datei=fopen("menu.txt","a+");
      fwrite($datei,$_POST["newmenu"]."|");
      fclose($datei);
      $name=$_POST["newmenu"].".txt";
      $datei=fopen("$name","w+");
      fclose($datei);
      echo "<br><br><center><q style='color:green'>Menüpunkt "".$_POST["newmenu"]."" hinzugefügt.</q></center>";
      }

      Diese zeichen rufen bisher Warnings hervor.
      Es werden sicher noch etliche mehr sein.

      1. Huhu

        $name=$_POST["newmenu"].".txt";
        $datei=fopen("$name","w+");
        fclose($datei);

        Diese zeichen rufen bisher Warnings hervor.

        Und zwar ... ?
        Du darfst Deine Warnings ruhig zeigen, hier haben sicherlich fast alle schonmal welche gesehn ;-)

        Es werden sicher noch etliche mehr sein.

        Ja, alle die Dein System nicht für Dateinamen erlaubt.

        Warum möchtest Du zu jedem neuen Menüpunkt eine Datei ohne Inhalt anlegen?

        Viele Grüße

        lulu

        --
        bythewaythewebsuxgoofflineandenjoytheday
        1. Weil das Script leider noch nicht vorrausagen kann, was unter dem menüpunkt mal stehen soll.

          Nichtsdestotrotz weis ich immernoch nicht ob es eine funktion zum entschärfen von php sensiebelen zeichen gibt, und wie die ersatzzeichen  vom Unicode bzw utf8 aussehen.

          Naja, da dieser Scriptteil eh in nem "sicheren" bereich liegt überlass ich mal die verantwortung nur "vernüftige" namen zu verteilen den später admins der sektion.

          Gruß,

          Jan

          1. echo $begrüßung;

            Nichtsdestotrotz weis ich immernoch nicht ob es eine funktion zum entschärfen von php sensiebelen zeichen gibt, und wie die ersatzzeichen  vom Unicode bzw utf8 aussehen.

            Du verwendest Begriffe, die in deinem Wortschatz eine klare Bedeutung haben mögen, aber im "allgemein PHP-Programmierer-Vokabular" nicht definiert sind. Versuche doch bitte dein Problem noch einmal zu beschreiben und dabei auf die Begriffe "zensible zeichen" und "Ersatzzeichen von Unicode" zu verzichten, oder zu erläutern, was genau du darunter verstehst.

            echo "$verabschiedung $name";

            1. Sensiebele Zeichen sind alle Zeichen die in PHP für irgendwas reserviert sind %,/,usw.

              Ich hab nur so mega probleme damit, da windows meinen csv Dateien so schöne namen wie "Über uns" gibt, wenn meine scripte utf-8 verwenden.
              Das könnte ich zwar irendwie ausbügeln, aber nachdem ich 3 tage an fast 1500 zeilen gearbeitet habe und dort mit massig dateinamen (aus dem windows system) hantiere gibt das einen wunderschönen charset mischmasch mit abundzu noch htmlspecialchars() zwischen drin, das mir auchnochmal super alles verwurschtelt. Totales chaos nach umstellung auf utf8, hätt ich mal von anfang an klar alles in utf8 gemacht .

              Naja wie dem auch sei ist alles egal, das einzig vernüftige was ich dabei noch lernen könnte, ist wie man Zeichen aus dem utf-8 Vorrat ersatzweise darstellen kann.

              Also wie die umlaute als &uuml; (k.a. ob das richtig is.. prinzipiell halt) darstellen kann, könnte es ja auch sein das es auch ersatzbezeichnungen für den utf8 vorrat gibt.

              Gruß,

              Jan

              1. echo $begrüßung;

                Sensiebele Zeichen sind alle Zeichen die in PHP für irgendwas reserviert sind %,/,usw.

                Da haben wir das Missverständnis. Es gibt keine reservierten Zeichen in PHP. Je nach Kontext haben einige Zeichen unterschiedliche Bedeutung, aber sie sind nicht für die mit PHP zu verarbeitenden Daten gesperrt. Allenfalls muss man sie in besonderer Weise kennzeichnen, damit sie sich von Zeichen, die im aktuellen Kontext eine Bedeutung haben, unterscheiden kann. Beispielsweise muss einem ' in einem mit '' eingerahmten String ein \ vorangestellt werden.

                Ich hab nur so mega probleme damit, da windows meinen csv Dateien so schöne namen wie "Über uns" gibt, wenn meine scripte utf-8 verwenden.

                Meinst du vielleicht Zeichen, die in einem Dateinamen nicht vorkommen dürfen? Das ist aber keine Einschränkung, die PHP zu verantworten hat. In diesem Fall wäre die Beschreibung des Dateisystems/Betriebssystems zu Rate zu ziehen.

                Außerdem geht aus deinen Ausführungen nicht hervor, was du da für eine Umstellung machst, so dass man das Problem, das du hast, nachvollziehen könnte, und dir somit aus der eigenen Erfahrung die Fallstricke und Umgehungsmöglichkeiten aufzuzeigen.

                Naja wie dem auch sei ist alles egal, das einzig vernüftige was ich dabei noch lernen könnte, ist wie man Zeichen aus dem utf-8 Vorrat ersatzweise darstellen kann.
                Also wie die umlaute als &uuml; (k.a. ob das richtig is.. prinzipiell halt) darstellen kann, könnte es ja auch sein das es auch ersatzbezeichnungen für den utf8 vorrat gibt.

                Es ist stark kontextabhängig, ob eine Ersatzschreibweise nötig ist, und wenn ja, wie diese auszuführen ist. Der Kontext ist aber eher außerhalb PHPs zu suchen, beispielsweise in HTML, XML, Javascript. Für alle drei aufgezählten Kontexte gelten eigene Regeln.

                Oder meinst du die Bytewerte, die für ein bestimmtes Zeichen verwendet werden, wenn es gemäß UTF-8 kodiert ist? Oder meinst du, welche Zeichen für diese Byte-Werte genommen werden, wenn du dir eine UTF-8-Bytefolge in ein Editor ansiehst, der gerade auf eine andere Zeichenkodierung eingestellt ist?

                Wenn bei mir das Zeichen U die Codierung 815 hätte, und du eine (De-)Kodierungsvorschrift zu Rate ziehst, die dir daraus ein X macht, dann kann das auf den ersten Blick so aussehen, als ob es eine "Ersatzschreibweise" für das U gäbe. Doch hier haben dir einfach nur die verschiedenen Kodierungssysteme ein X für ein U vorgemacht.

                echo "$verabschiedung $name";

  2. Hallo,

    Hier findest Du wohl das richtige, z.B. quotemeta()

    Gruß, Nils