Ankündigung

Einklappen
Keine Ankündigung bisher.

Anführungszeichen und Umlaute in Formularfelder

Einklappen

Neue Werbung 2019

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

  • Anführungszeichen und Umlaute in Formularfelder

    Hallo

    habe ein mehrstufiges Formular und gebe die Daten per Session weiter, erst am Schluss ist der DB -Eintrag.

    in der Session kommen die Anführungszeichen, einfache und doppelte und die Umlaute noch bestens

    erfasst wurde:
    Für 'schöne' blaue "Flöhe" frägt man

    Die Session gibt das richtige aus
    <?php echo stripslashes($_SESSION['name']);?>

    Doch der Text muss in ein Inputfeld des Formulars, und das geht nicht, weil ja vom Value her das Zeichen dann quasi geschlossen wird.


    <input type="text" name="name" size="36" class="inputtxt" value="<?php if(!empty($_SESSION['name'])){echo stripslashes($_SESSION['name']);}?>" />

    Wir bringe ich den Text komplett in das Inputfeld?

    PS: da die User das Formular ausfüllen sollten einfache und Doppelte Anführungszeichen wie auch Umlaute möglich sein.

    mercie Danke

  • #2
    poste doch bitte mal deinen Code in .[ PHP] Tags.

    Kommentar


    • #3
      Siehe: http://php-de.github.io/jumpto/kontextwechsel/

      htmlspecialchars() ist dein Freund.

      LG
      The string "()()" is not palindrom but the String "())(" is.

      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        Öhm, html escapen?! Htmlentities und so.

        Forum: Fortgeschrittene Fragen?!

        Kommentar


        • #5
          ich meinte auch addslashes aber dann wird

          <?php echo stripslashes($_SESSION['name']);?>
          ergibt normal Für 'schöne' blaue "Flöhe" frägt man und im Formfeld Für \'schöne\' blaue \

          aber im Quellcode ist dann doch alles
          <input name="ort" type="text" id="ort" size="24" class="inputtxt" value="Für \'schöne\' blaue \"Flöhe\" frägt man " />


          addslashes macht Für \\\'schöne\\\' blaue \\\

          ohne etwas, also nur die Session macht Für

          addcslashes geht nicht


          komisch, ich meine, das was da der Quellcode anzeigt wäre schon gut, aber auch dem Bildschirm wird es nicht dargestellt

          <input name="ort" type="text" id="ort" size="24" class="inputtxt" value="Für \'schöne\' blaue \"Flöhe\" frägt man " />

          Kommentar


          • #6
            Vergiss Strip/AddSlashes bzgl. Kontextwechsel zu HTML. Nutze für die Ausgabe nach HTML htmlspecialchars() (und am besten konsequent alles in UTF-.

            Dadurch kannst du in HTML "Steuerzeichen" als "normale Textzeichen" maskieren/angeben. Und immer den Charset (dritter Parameter) mit angeben, da sich der default hier seitens PHP nun schon das dritte mal geändert hat. Sowas könnte zB so aussehen:

            PHP-Code:
            function e($str) { 
              return 
            htmlspecialchars
                        
            $str
                        
            ENT_QUOTES ENT_SUBSTITUTE ENT_DISALLOWED ENT_HTML5
                        
            'UTF-8' 
                     
            );  


            $str 'Der schöne <Floh> sitzt am "Klo".'
            echo 
            e($str); // Der schöne &lt;Floh&gt; sitzt am &quot;Klo&quot;. 
            LG
            The string "()()" is not palindrom but the String "())(" is.

            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #7
              Und ich weiss nicht weshalb...

              das ist der Code, resp. die Codeversuche

              <?php echo $_SESSION['name'];?>
              <input type="text" name="name" size="36" class="inputtxt" value="<?php if(!empty($_SESSION['name'])){echo $_SESSION['name'];}?> "/><br>


              <?php echo htmlentities($_SESSION['name']);?>
              <input type="text" name="name" size="36" class="inputtxt" value="<?php if(!empty($_SESSION['name'])){ echo htmlentities($_SESSION['name']);}?> "/><br>



              <?php echo htmlentities($_SESSION['name'] ,ENT_QUOTES);?>
              <input type="text" name="name" size="36" class="inputtxt" value="<?php if(!empty($_SESSION['name'])){echo htmlentities($_SESSION['name'] ,ENT_QUOTES);}?> "/><br>



              <?php echo addslashes($_SESSION['name']);?>
              <input type="text" name="name" size="36" class="inputtxt" value="<?php if(!empty($_SESSION['name'])){echo addslashes($_SESSION['name']);}?> "/>
              <br>

              <?php echo htmlspecialchars($_SESSION['name'],
              ENT_QUOTES | ENT_SUBSTITUTE | ENT_DISALLOWED | ENT_HTML5,
              'UTF-8'
              ); ?>
              <input type="text" name="name" size="36" class="inputtxt" value="<?php if(!empty($_SESSION['name'])){echo htmlspecialchars($_SESSION['name'],
              ENT_QUOTES | ENT_SUBSTITUTE | ENT_DISALLOWED | ENT_HTML5,
              'UTF-8'
              ); }?> "/><br><br>
              <br>

              ------------------------

              und das ist der Quellcode der rauskommt
              Für 'schöne' blaue "Flöhe" frägt man
              <input type="text" name="name" size="36" class="inputtxt" value="Für 'schöne' blaue "Flöhe" frägt man "/><br>



              <input type="text" name="name" size="36" class="inputtxt" value=" "/><br>




              <input type="text" name="name" size="36" class="inputtxt" value=" "/><br>



              Für \'schöne\' blaue \"Flöhe\" frägt man
              <input type="text" name="name" size="36" class="inputtxt" value="Für \'schöne\' blaue \"Flöhe\" frägt man "/>
              <br>

              F�r &apos;sch�ne&apos; blaue &quot;Fl�he&quot; fr�gt man
              <input type="text" name="name" size="36" class="inputtxt" value="F�r &apos;sch�ne&apos; blaue &quot;Fl�he&quot; fr�gt man "/><br><br>
              <br>

              ------------

              Für 'schöne' blaue "Flöhe" frägt man

              Das macht der Browser damit

              Für \'schöne\' blaue \"Flöhe\" frägt man
              F�r 'sch�ne' blaue "Fl�he" fr�gt man


              Ich glaube ich habe ein grundsätzliches Denkproblem.

              Habe ein Formular mit vielen Einträgen, und je nachdem was erfasst wird kommt ein weiteres Eingabefenster. Die durch den User erfassten Daten (welche Umlaute, doppelte oder einfache Anführungszeichen enthalten können) werden bis zum Schluss in einer Session mitgenommen.

              und am Schluss geht alles in eine MySql-Datenbank.

              Aktuell geht es wegen der Anführungszeichen nicht in die DB (anderes Problem) und von wegen Spam und Hacker wollte ich die Site sicher machen.

              Doch Umlaute, doppelte und einfachen Anführungszeichen gehen nicht alle zusammen.

              Danke für die Hilfe

              Kommentar


              • #8
                mach das doch bitte in die php Tags!

                PHP-Code:
                <?php echo $_SESSION['name'];?>
                <input type="text" name="name" size="36" class="inputtxt" value="<?php if(!empty($_SESSION['name'])){echo $_SESSION['name'];}?> "/><br>


                <?php echo htmlentities($_SESSION['name']);?>
                <input type="text" name="name" size="36" class="inputtxt" value="<?php if(!empty($_SESSION['name'])){ echo htmlentities($_SESSION['name']);}?> "/><br>



                <?php echo htmlentities($_SESSION['name'] ,ENT_QUOTES);?>
                <input type="text" name="name" size="36" class="inputtxt" value="<?php if(!empty($_SESSION['name'])){echo htmlentities($_SESSION['name'] ,ENT_QUOTES);}?> "/><br>



                <?php echo addslashes($_SESSION['name']);?>
                <input type="text" name="name" size="36" class="inputtxt" value="<?php if(!empty($_SESSION['name'])){echo addslashes($_SESSION['name']);}?> "/>
                <br>

                <?php echo htmlspecialchars($_SESSION['name'],
                ENT_QUOTES ENT_SUBSTITUTE ENT_DISALLOWED ENT_HTML5,
                'UTF-8'
                ); ?>
                <input type="text" name="name" size="36" class="inputtxt" value="<?php if(!empty($_SESSION['name'])){echo htmlspecialchars($_SESSION['name'],
                ENT_QUOTES ENT_SUBSTITUTE ENT_DISALLOWED ENT_HTML5,
                'UTF-8'
                ); }?> "/><br><br>
                <br>
                sieht doch gleich nur halb so grässlich aus
                Fatal Error: Windows wird gestartet

                Wie administriert man ein Netzwerk: Beispiel

                Kommentar


                • #9
                  @mercie_Danke: Naja die Codierung etc.. muss schon auch stimmen, aber das wissen wir ja nicht was du nutzt.

                  Gibt mehr Ansätze, einer könnte so aussehen - schau dir dazu auch die Doku von specialchars an, zB bzgl. der verwendeten (X)HTML Version.

                  PHP-Code:
                  function esc($str) {  
                    return 
                  htmlspecialchars(  
                              
                  $str,  
                              
                  ENT_QUOTES ENT_SUBSTITUTE ENT_DISALLOWED ENT_XHTML
                              
                  'UTF-8'  
                           
                  );   
                  }  

                  // ...

                  // kannst zB ne Variable anlegen
                  $name = (!empty($_SESSION['name'])) ? $_SESSION['name'] : "";

                  // und diese hier dann nurmehr setzen
                  echo '<input type="text" name="name" size="36" class="inputtxt" value="'.esc($name).'"/><br>'
                  The string "()()" is not palindrom but the String "())(" is.

                  Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                  PHP.de Wissenssammlung | Kein Support per PN

                  Kommentar

                  Lädt...
                  X