Hallo zusammen,
habe eine Seite, die Input-Felder via Ajax an einen Apache mit PHP 5.3.2 schickt um sie dort in eine DB zu schreiben. Das funktioniert soweit auch recht gut (auch mit Umlauten), wenn da nicht diese Hochkommas wären. Habe den Code auf ein Minimum zusammengestrichen:
<?php
header('content-type: text/html; charset=utf-8');
if (isset($_POST['val'])) {
echo "<br>".$_POST['val'];
echo "<br>".urldecode($_POST['val']);
die();
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>Testseite</title>
<script type="text/javascript">
function clack() {
var elm = document.getElementById('eingabe')
var t = elm.value + "\n" + encodeURIComponent(elm.value);
alert(t);
var AjaxScript = "<?php echo $_SERVER['PHP_SELF']?>";
var AjaxParam = "val=" + encodeURIComponent(elm.value);
HttpRequest = new XMLHttpRequest();;
HttpRequest.open("POST", AjaxScript, false);
HttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8');
HttpRequest.send(AjaxParam);
document.getElementById('rueck').innerHTML = HttpRequest.responseText;
}
</script>
</head>
<body>
<input type='text' id='eingabe' value="<?php echo $_POST['val'] ?>">
<input type='button' onclick="javascript:clack()" value='Klick'>
<hr>
AjaxScript empfängt: <span id='rueck'></span><br>
</body>
</html>
Das ist vielleicht etwas tricky, daher eine kurze Erläuterung:
- ein Input-Feld in einem body zur Aufnahme des Text
- ein Button (Klick) ruft eine Javascript-Routine zum Senden des Inhalts an den Server.
- das Javascript zeigt zunächst den Inhalt und den mit encodeURIComponent() gewandelten Inhalt der Inputbox in einer Alert-Box an
- das Javascript erstellt ein HTTPRequest-Objekt und schickt den gewandelten Inhalt der Inputbox an die URL der dargestellten Seite (synchron)
- PHP gibt den empfangenen Inhalt des $_POST-Arrays unverändert und mit urldecode() gewandelt aus.
- Javascript empfängt die Ausgabe und stellt sie auf der Seite in einem <span>-Element dar
Das Eingabefeld kann beliebigen Text aufnehmen und PHP liefert die von Javascript gewandelte Eingabe in Originalform zurück an die Seite. Sobald ein Hochkomma ins Spiel kommt, wird ein \ vorangestellt (aus ' wir ' und aus " wird "). Das landet so auf der Beispielseite und natürlich auch in meiner DB.
Gemäß diverser Dokus wir ein mit encodeURIComponent() gewandelter Inhalt in $_GET und $_REQUEST-Arrays automatisch zurück gewandelt. Da die PHP-Ausgaben des Scripts identisch sind, sollte das auch für $_POST-Arrays gelten.
Ich könnte natürlich einfach das Ergebnis in PHP mit str_replace() nachbearbeiten, vermute aber, dass ich einem Denkfehler aufgelaufen bin. Welchem? Bin für jeden Tipp dankbar.
mfg Rolf