Hi,
ich habe einen verschlüsselten String, den ich per Ajax an den Server übertragen möchte.
Der String lautet:
ùE׸4½wâ+\ðF#¹‹eQ·>a›¢‘r@*.ö=™¹”3 §@3¶m{LÖLOÎ:XOÍ‹™Æ‚
Ankommen tut aber dies:
ùE׸4½wâ \ðF#¹‹eQ·>a›¢‘r@*.ö=™¹”3 §@3¶m{LÖLOÎ:XOÍ‹™Æ‚
Wie man sieht, fehlt das "+"-Zeichen an der 9. Stelle.
Mein Testcode:
Ich lasse extra in PHP einen Vergleich machen, um auszuschließen, dass der fwrite-Befehl den Fehler verursacht. Es kommt definitiv falsch in der PHP-Datei an. Was kann ich also tun? Ich habe schon mit verschiedenen Headern (beim Request und in der PHP-Datei) experimentiert, aber immer erhalte ich das gleiche Ergebnis.
Der String oben ist nur ein Beispiel. Auch andere verschlüsselte Strings werden falsch übertragen.
Liegt es am Zeichensatz, wer kann helfen?
- - - Aktualisiert - - -
Anders herum geht es. Hole ich den (auf dem Server korrigierten) String mit responseText auf die HTML-Seite zurück, wird er richtig übertragen. Liegt es daher evtl. am $_POST?
- - - Aktualisiert - - -
Ich bin noch ein bisschen weitergekommen. Mit encodeURIComponent() funktioniert jetzt dieses Beispiel. Allerdings werden größere Strings damit auch nicht richtig übertragen. Wobei ich das mit encodeURIComponent() nicht verstehe, denn eigentlich übertrage ich einen Binärstring, der lediglich auf dem Server abgespeichert werden soll.
Daher meine präzisere Frage: Wie übertrage ich mit Ajax einen binären String?
ich habe einen verschlüsselten String, den ich per Ajax an den Server übertragen möchte.
Der String lautet:
ùE׸4½wâ+\ðF#¹‹eQ·>a›¢‘r@*.ö=™¹”3 §@3¶m{LÖLOÎ:XOÍ‹™Æ‚
Ankommen tut aber dies:
ùE׸4½wâ \ðF#¹‹eQ·>a›¢‘r@*.ö=™¹”3 §@3¶m{LÖLOÎ:XOÍ‹™Æ‚
Wie man sieht, fehlt das "+"-Zeichen an der 9. Stelle.
Mein Testcode:
Code:
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8" />
<title>Test</title>
</head>
<body>
<script>
if(window.XMLHttpRequest){
request=new XMLHttpRequest();}
else
if(window.ActiveXObject){
try{
request=new ActiveXObject('Msxml2.XMLHTTP');}
catch(e){
try{
request=new ActiveXObject('Microsoft.XMLHTTP');}
catch(e){}}}
grund="ùE׸4½wâ+\ðF#¹‹eQ·>a›¢‘r@*.ö=™¹”3 §@3¶m{LÖLOÎ:XOÍ‹™Æ‚";
var url = "https://www.yogifotos.de/Shoutbox/shoutbox_schreiben.php";
request.open('post',url,true);
request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
request.send('&grund='+grund);
</script>
</body>
</html>
Code:
<?php
header("Content-Type:text/html;charset=utf-8");
header('Cache-Control:must-revalidate,pre-check=0,no-store,no-cache,max-age=0,post-check=0');
header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:POST');
$datei="Test";
$dat=fopen($datei,'a');
if(!is_resource($dat))exit();
if(!flock($dat,LOCK_EX))exit();
$text=substr($_POST["grund"],0,3000);
if($text!=="ùE׸4½wâ+\ðF#¹‹eQ·>a›¢‘r@*.ö=™¹”3 §@3¶m{LÖLOÎ:XOÍ‹™Æ‚")fwrite($dat,"Schitt");
flock($dat,LOCK_UN);
fclose($dat);
header("Content-Type:$ct");
?>
Ich lasse extra in PHP einen Vergleich machen, um auszuschließen, dass der fwrite-Befehl den Fehler verursacht. Es kommt definitiv falsch in der PHP-Datei an. Was kann ich also tun? Ich habe schon mit verschiedenen Headern (beim Request und in der PHP-Datei) experimentiert, aber immer erhalte ich das gleiche Ergebnis.
Der String oben ist nur ein Beispiel. Auch andere verschlüsselte Strings werden falsch übertragen.
Liegt es am Zeichensatz, wer kann helfen?
- - - Aktualisiert - - -
Anders herum geht es. Hole ich den (auf dem Server korrigierten) String mit responseText auf die HTML-Seite zurück, wird er richtig übertragen. Liegt es daher evtl. am $_POST?
- - - Aktualisiert - - -
Ich bin noch ein bisschen weitergekommen. Mit encodeURIComponent() funktioniert jetzt dieses Beispiel. Allerdings werden größere Strings damit auch nicht richtig übertragen. Wobei ich das mit encodeURIComponent() nicht verstehe, denn eigentlich übertrage ich einen Binärstring, der lediglich auf dem Server abgespeichert werden soll.
Daher meine präzisere Frage: Wie übertrage ich mit Ajax einen binären String?
Zuletzt bearbeitet von einem Moderator: