MB: Ajax, PHP, Javascript. Wo kommen die Slashes her?

Hallo!

Ich zerbrech mir seit ner Stunde den Kopf, also möcht ich euch mal zu Rate ziehen.

Auf meiner Seite hab ich ein Ajax-Script, welches die Inhalte eines Eingabefelds an ein php-Skript übermittelt.

Der Inhalt des Eingabefelds "search"

echo "Suchen nach: <input type="text" id="search" onkeyup="macheRequest('ajax.php')">";

wird an ajax.php übermittelt

var queue = 'search=' + urlEncode(document.getElementById('search').value);
http_request.send(queue);

Das ist die Funktion urlEncode, die alle Sonderzeichen beseitigen soll:

function urlEncode(str)
{
str=escape(str);
str=str.replace(new RegExp('\+','g'),'%2B');
return str.replace(new RegExp('%20','g'),'+');
}

So weit so gut. Wenn ich vor dem "send" die queue per Alert ausgebe, ist alles schön kodiert. b!"a# gibt z.B. b%21%22a%23 .

ajax.php gibt lediglich alle übermittelten arrays mit print_r bzw. foreach und echo aus, danach wird die "Antwort" per innerHTML in die Seite geladen.

Jetzt das Problem: einige Sonderzeichen wie " ' \ werden mit Slashes angezeigt, was nach dem kodieren ja nicht passieren sollte. Wo sitzt da der Wurm drin, was hab ich falsch gemacht?

Lg
M.B.

  1. Hallo,

    Nur eine Vermutung; wissen tu ich es nicht: Ich könnte mir vorstellen, dass es an dieser PHP-Einstellung liegt: <http://de3.php.net/manual/de/info.configuration.php#ini.magic-quotes-gpc>

    „Legt die magic_quotes Einstellungen für GPC (Get/Post/Cookie) fest. Ist diese Einstellung auf on, werden alle ' (einzelne Anführungszeichen), " (doppelte Anführungszeichen), \ (Backslash) und NUL's automatisch mit einem Backslash geschützt.“

    Mit get_magic_quotes_gpc() kannst Du Dir die aktuelle Konfiguration dazu ansehen.

    Grüße,
    Fabian.

    1. Tatsache, sieht so aus als wären die Dinger an. Jetzt muss ich also extra Rechenzeit verschwenden für stripslashes; set_magic_quotes_runtime(0) klappt nicht :(

      1. echo $begrüßung;

        Tatsache, sieht so aus als wären die Dinger an. Jetzt muss ich also extra Rechenzeit verschwenden für stripslashes;

        Es wurde auch schon welche verschwendet, um sie einzufügen.

        set_magic_quotes_runtime(0) klappt nicht :(

        set_magic_quotes_runtime() wirkt ja auch nur auf Magic Quotes zur Laufzeit, nicht auf die, die bereits vor dem Scriptstart zu den GPC-Variablen hinzugefügt wurden. Im Script kann man die GPC-Magic-Quotes nicht mehr ausschalten, da ist es zu spät, die GPC-Arrays sind dann schon gefüllt, und wenn register_globals angeschaltet ist auch diverse andere Variablen. Um sie dann noch rückgängig zu machen, müssten viele Variablen geändert werden, deren Inhalt bereits weiterverarbeitet worden sein könnte.

        Es gibt auch andere Möglichkeiten, generell die Magic Quotes auszuschalten. Ansonsten empfiehlt es sich, das Beispiel 2 der verlinkten Seite einmalig am Script-Anfang zu verwenden. Magic Quotes sind ab PHP6 nicht mehr vorhanden. Wenn man dann die Beseitigung quer über das Script gestreut hat, ist das Entfernen mühsamer.

        echo "$verabschiedung $name";

      2. Funktioniert es nicht, die in der php.ini oder .htaccess mit „php_flag magic_quotes_gpc off“? magic_quotes_runtime ist auch etwas anderes als magic_quotes_gpc: GPC steht für GET, POST, COOKIE. Runtime bearbeitet afaik andere Datenquellen, siehe <http://www.php.net/manual/de/info.configuration.php#ini.magic-quotes-gpc>.