Andreas Nagel: per ajax Dateiname mit Pluszeichen an open.php senden

Hallo9 zusammen

per ajax sende ich per POST Dateinamen die mit open.php geöffnet werden sollen. Und das funktioniert auch einwandfrei. Doch jetzt enthält das Verzeichnis einer Dateio ein Pluszeichen und ich erhalte stets die Meldung das Verzeichnis würde nicht existieren.

Der Code der aufrufenden Datei:

	$.ajax({  
	type: "POST",  
	url: "Open.php",  
	data: "Datei=" + Link.getAttribute("Datei"),  
	success: function() {}  
	});  

Der Code der PHP Datei:

  
$datei = utf8_decode($_REQUEST['Datei']);  
  
system("%windir%\\notepad.exe $datei");  

Könnte man vielleicht das Pluszeichen ersetzen, so daß es in der open.php Datei wieder in solches umgewandelt wird.

Danke gruß Andreas

  1. Hi there,

    Der Code der aufrufenden Datei:

    $.ajax({  
    

    type: "POST",
    url: "Open.php",
    data: "Datei=" + Link.getAttribute("Datei"),
    success: function() {}
    });

      
    Ich sehe da nirgendwo ein Pluszeichen \*in\* der Datei.  
    Lass Dir einmal ausgeben, was $\_REQUEST['Datei'] überhaupt beinhaltet. Im übrigen hast Du gerade einen überzeugenden Nachteil von Frameworks entdeckt. Schreib Dir die Funktionen selber, dann muss brauchst Du nicht herumraten, was irgendein $.ajax-Mist aufführt...  
      
      
    
    
    1. Hallo zusammen

      Ich schreibe jetzt in die aufrufende Datei mit ajax

        
      $.ajax({  
      type: "POST",  
      url: "Open.php",  
      data: "Datei=" + encodeURIComponent(Link.getAttribute("Datei")),  
      success: function() {}  
      
      

      und damit funktionierts einwandfrei.

      Vielen Dank dafür Gruß Andreas

      1. Hallo

        hab noch was vergessen. Denn wenn ich jetzt einen Link anklicke der eine Datei öffnet, wird bis zum obersten Rand gescrollt. Ich möchte aber das der momentane Punkt gehalten bleibt. Ich probierte es bisher nur im ie und erhalte dann bei documenht.body.scrollTop immer nur 0 als Rückgabewert.

        Danke gruß Andreas

  2. Hi!

    per ajax sende ich per POST Dateinamen die mit open.php geöffnet werden sollen. Und das funktioniert auch einwandfrei. Doch jetzt enthält das Verzeichnis einer Dateio ein Pluszeichen und ich erhalte stets die Meldung das Verzeichnis würde nicht existieren.

    Ja, Kontextwechsel beachten! Das Plus-Zeichen hat in einer URL eine Sonderbedetung und steht für ein Leerzeichen. Der Absatz zu Ajax sollte auch auch in deinem Fall passen.

    Könnte man vielleicht das Pluszeichen ersetzen, so daß es in der open.php Datei wieder in solches umgewandelt wird.

    Nein, das ist ungünstig, weil dir dann ein anderes Zeichen verloren geht. Du musst es nur wie vorgesehen notieren, dass es als ein solches erkannt wird.

    Lo!

    1. moin,

      per ajax sende ich per POST Dateinamen die mit open.php geöffnet werden sollen. Und das funktioniert auch einwandfrei. Doch jetzt enthält das Verzeichnis einer Dateio ein Pluszeichen und ich erhalte stets die Meldung das Verzeichnis würde nicht existieren.

      Ja, Kontextwechsel beachten! Das Plus-Zeichen hat in einer URL eine Sonderbedetung und steht für ein Leerzeichen. Der Absatz zu Ajax sollte auch auch in deinem Fall passen.

      Anmerkung: Wir haben bei Ajax auch mit POST den enctype "application/x-www-form-urlencoded", d.h., die Komponenten sind wie bei einem GET zu encoden (früher escape). Im Artikel steht "Auch dafür können die einzufügenden Daten mit der Funktion encodeURIComponent()  behandelt werden." -> statt "können" sollte da besser ein "müssen" notiert sein.

      -Hotti

      1. Hi!

        Im Artikel steht "Auch dafür können die einzufügenden Daten mit der Funktion encodeURIComponent()  behandelt werden." -> statt "können" sollte da besser ein "müssen" notiert sein.

        "Können" ist schon richtig, denn man darf auch anderen passenden Code verwenden. Da der gesamte Artikel sich damit beschäftigt, zu erklären warum die Daten behandelt werden müssen, sollte schon deshalb klar geworden sein, dass das Behandeln an sich eine Pflichtveranstaltung ist. In dem Abschnitt geht es "nur noch" darum, neben den zu beachtenden Stellen mögliche Werkzeuge zu benennen.

        Lo!

        1. Moin,

          Im Artikel steht "Auch dafür können die einzufügenden Daten mit der Funktion encodeURIComponent()  behandelt werden." -> statt "können" sollte da besser ein "müssen" notiert sein.

          "Können" ist schon richtig, denn man darf auch anderen passenden Code verwenden. Da der gesamte Artikel sich damit beschäftigt, zu erklären warum die Daten behandelt werden müssen, sollte schon deshalb klar geworden sein, dass das Behandeln an sich eine Pflichtveranstaltung ist. In dem Abschnitt geht es "nur noch" darum, neben den zu beachtenden Stellen mögliche Werkzeuge zu benennen.

          Wie, anstelle encodeURIComponent() ne eigene Bastelei verwenden? Da geht das SELF aber nun doch ein bischen zu weit ;-)

          -hotti

          1. Hi!

            Wie, anstelle encodeURIComponent() ne eigene Bastelei verwenden? Da geht das SELF aber nun doch ein bischen zu weit ;-)

            Vielleicht escape(), wenn man wirklich kein UTF-8 will. Ich mach da keine Vorschriften.

            Lo!

            1. Hi!

              Wie, anstelle encodeURIComponent() ne eigene Bastelei verwenden? Da geht das SELF aber nun doch ein bischen zu weit ;-)

              Vielleicht escape(), wenn man wirklich kein UTF-8 will. Ich mach da keine Vorschriften.

              Schön wärs ja, wenn die Unterschiede zwischen escape(), encodeURIComponent() und encodeURI() in dem von Dir referenzierten Artikel erklärt würden (für unbedarfte Außenstehende).
              -hotti

              1. Hi!

                Schön wärs ja, wenn die Unterschiede zwischen escape(), encodeURIComponent() und encodeURI() in dem von Dir referenzierten Artikel erklärt würden (für unbedarfte Außenstehende).

                Mag sein, aber man kann sich die Unterschiede auch aus den anderenorts stehenden Funktionsbeschreibungen erarbeiten.

                Lo!

                1. Hi!

                  Schön wärs ja, wenn die Unterschiede zwischen escape(), encodeURIComponent() und encodeURI() in dem von Dir referenzierten Artikel erklärt würden (für unbedarfte Außenstehende).

                  Mag sein, aber man kann sich die Unterschiede auch aus den anderenorts stehenden Funktionsbeschreibungen erarbeiten.

                  Klar. Wenn ich Zeit habe, erarbeite ich mir das alles selbst ;-)
                  Aber alle Tricks verrate ich nicht, hehe ;-)

                  -hotti

  3. Hi,

    $.ajax({  
    

    type: "POST",
    url: "Open.php",
    data: "Datei=" + Link.getAttribute("Datei"),
    success: function() {}
    });

    
    > Könnte man vielleicht das Pluszeichen ersetzen, so daß es in der open.php Datei wieder in solches umgewandelt wird.  
      
    Ich würde dir empfehlen, die Objektliteral-Schreibweise für Parameter zu verwenden, dann kümmert sich jQuery für dich um das Escapen von Sonderzeichen.  
      
    Also etwa:  
      
    ~~~javascript
    	$.ajax({  
    	type: "POST",  
    	url: "Open.php",  
    	data: { 'Datei=' : Link.getAttribute("Datei") },  
    	success: function() {}  
    	});  
    
    

    Bis die Tage,
    Matti

    1. Hi,

      data: { 'Datei=' : Link.getAttribute("Datei") },

        
      Da war ich etwas schnell, das Gleichheitszeichen muss noch weg.  
        
      Bis die Tage,  
      Matti
      
      -- 
      [Webapplikationen in C++ entwickeln](http://tntnet.org/)
      
    2. hi Matti,

      Ich würde dir empfehlen, die Objektliteral-Schreibweise für Parameter zu verwenden, dann kümmert sich jQuery für dich um das Escapen von Sonderzeichen.

      vielen Dank! Hätte mich schon gewundert, wenn jQuery sowas nicht von Haus aus machen könnte ;-)

      Grüß mir die schöne Schweiz,
      Hotti