[Javascript/PHP] Prozentzeichen in textarea

martin

Well-Known Member
Hallo

irgendwie will das nicht so wie ich will... :grumble:

also ich habe eine textarea, die ihren Inhalt bei onchange per Ajax an eine php Seite schickt. Soweit so gut. Alles klappt so wie es soll, bis auf eine kleine Ausnahme.... und zwar wenn ich in die Textarea ein % Zeichen eingebe. Z.B. "50% Anzahlung".
In diesem Fall wird auf der php Seite, aus mir unersichtlichen Gründen, alles nach dem % Zeichen abgeschnitten.
Die Seiten sind alle in UTF-8 codiert.
Probiert habe ich mit escape(inhalt) die formulardaten zu übergeben, dann klappt zwar das %Zeichen, die Umlaute gehen dafür aber nicht mehr.

Ich steh'aufm Schlauch und bin für jeden Tip dankbar...:eek:

Gruß
martin
 
Hi,

kannst Du nicht einfach den Input der Textarea nach Erhalt der Änderung durch ne Funktion jagen wo die "Sonderzeichen" entsprechend umschreibt das se konform sans und bei der Ausgabe halt je nach Zielcharset retour ?

Gruß Bär
 
Hallo bummibaer

ich habe schon mehrere Funktionen probiert, allerdings führt nichts zu gewünschtem Erfolg. Die php Dateien sind wie gesagt alle im utf8 Zeichensatz. Also habe ich mit folgender Javascript Funktion versucht auch die Übergabe (per Ajax - prototype) ebenfalls in UTF8 zu machen. Das Umwandeln klappt soweit, scheitern tu ich aber dennoch an den Sonderzeichen (% und & gehen nicht).
var Utf8 = {

// public method for url encoding
encode : function (string) {
string = string.replace(/\r\n/g,"\n");
var utftext = "";

for (var n = 0; n < string.length; n++) {

var c = string.charCodeAt(n);

if (c < 128) {
utftext += String.fromCharCode(c);
}
else if((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
}
else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}

}

return utftext;
},

// public method for url decoding
decode : function (utftext) {
var string = "";
var i = 0;
var c = c1 = c2 = 0;

while ( i < utftext.length ) {

c = utftext.charCodeAt(i);

if (c < 128) {
string += String.fromCharCode(c);
i++;
}
else if((c > 191) && (c < 224)) {
c2 = utftext.charCodeAt(i+1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
}
else {
c2 = utftext.charCodeAt(i+1);
c3 = utftext.charCodeAt(i+2);
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}

}

return string;
}

}
 
Hi,
Ich würde mit utf8_encode und utf8_decode die Sache mal angehen. Sprich Eingaben von ISO-8859-1 nach UTF-8 encoden, danach speichern. Und beim Raußlesen aus der DB oifach von UTF-8 zu ISO-8859-1 wieder bärig fein mit utf8_decode decodieren. Des sollte eigentlich klappen, sofern Du keine Zwischenschritte nutzt wo irgendwas verwurstelt oder umcodiert wird.

Sprich einfach gesagt: Die Seite mit ISO-8859-1 betreiben und den UTF-8 Unfug dort oifach sein lassen. Es reicht ja aus wenn die Daten in der Datenbank UTF-8 hams. Für die Umkonvertierung DB <-> GUI gibt es ja die notwendigen Funktionen eigentlich alle. Sprich je nach Browser Land/Sprache kann das GUI dann aus dem Datenbankwert in UTF-8 + Encode / Decode ja alles passende generieren für`s GUI.

Test das mal und gib Feedback ob des hülfts.

Gruß Bär
 
zunächst mal danke für die Tips. Leider klappt es immer noch nicht. Habe jetzt folgendes kleines Bsp. gemacht.

test.html
PHP:
<html>
<head>
<script type="text/javascript" src="prototype.js"></script>

<script type="text/javascript">
function holen(value) {
	value1 = escape(value);
	alert(value);
	var myAjax = new Ajax.Request(
	"./test1.php",
	{ method: "post", parameters: "value="+value+"&value1="+value1 , onSuccess: zeigen }
	);
}
function zeigen( originalRequest ) {
	alert("ZEIGEN");
	document.getElementById("status").innerHTML = originalRequest.responseText;
}
</script>

</head>
<body>

<div id="status" style="width:280px; height:150px; background:#ffcccc; border:2px solid red;"></div>
<textarea onchange=holen(this.value)></textarea>

</body>
</html>

test1.php
PHP:
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

echo "URLenocde:".urlencode($_POST['value']);
echo "<br>";
echo "utf8_encode:".utf8_encode($_POST['value']);
echo "<br>";
echo "<br>";
echo "URLenocde:".urlencode($_POST['value1']);
echo "<br>";
echo "utf8_encode:".utf8_encode($_POST['value1']);
?>
leider ohne Erfolg. Wenn ich die escape Funktion in Javascript verwende, wird bei einem Umlaut nichts übergeben, die php Seite gibt nichts aus. Verwende ich die escape Funktion nicht, dann klappt alles mit den Umlauten, nicht aber das Prozentzeichen.

:ugly:
 
Nach langem hin und her hab ich es jetzt doch geschafft. Abhilfe hat die Javascript Funktion encodeURIComponent() geschafft.

Gruß
martin
 
Zurück
Oben