Falsche Zeichen im Text

Helgon

Bekanntes Mitglied
Hey, ich hab folgendes Problem. Ka ob das Java Forum die richtige Anlaufstelle ist, aber ich denke ihr könntet auch wissen woran es liegt.

Ich übergebe einen Text in der Form

Java:
Das ist der Lauftext der angezeigt werden soll!

der wird dann so leicht verändert

Java:
p7 = lauf.replace("&", "").replace(" ", "%");

was das ergibt:

Java:
Das%ist%der%Lauftext%der%angezeigt%werden%soll!

Das wird dann als Parameter an ne URL gehangen und die PHP aufgerufen.

Java:
$sh= $_GET['sh'];
	
	$datei = fopen("sh.txt", "w");
	if($datei != "null"){
		if (!$datei) {
			echo "err";
		} else {
			fwrite($datei, "$sh\n");
			fclose($datei);
			echo "1";
		}
	}

Das klappt auch alles super, das einzige Problem, dass Zeichen manchmal falsch in die TXT geschrieben werden.

Aus dem Text oben ist das geworden

Java:
Das%istÞr%LauftextÞr%angezeigt%werden%soll!

Dieses komische Þ taucht des öfteren auf in wörtern wie der, den, dem.. anscheinend liegts an dem "de". Jemand ne Idee wohers kommt/was man gegen machen kann?

Grüße
 
Ich hatte nen UTF-8 Header probiert

Java:
	header("Content-Type: text/html; charset=utf-8");

dann die Variable direkt zu encoden

Java:
utf8_encode()

und auch
Java:
mb_detect_encoding()

Hat nix geholfen, also wieder rausgeschmissen 🙁

Grüße
 
$sh= $_GET['sh'];

$datei = fopen("sh.txt", "w");

Was soll das eigentlich? Du erstellst eine Variable sh, verwendet sie aber nie? Sollte das nicht heißen fopen(sh."txt", "w") ... (hoffe, ich hab das mit der Verkettung von Strings in PHP nich richtig im Kopf, hab lange nicht mehr damit gearbeitet)

EDIT: Wenn du schon ein URL-encoding vornimmst, warum dann nicht gleich ein real existierendes (Leerzeichen ist glaub %20)? Dann musst du das theoretisch nicht mal manuell decodieren im Skript
 
Zuletzt bearbeitet:
Java:
            fwrite($datei, "$sh\n");


...

Zum Edit: Weil ich anfangs nicht encodet habe und ichs da dann eben manuell lösen musste, ist jetzt ja aber auch nicht mega viel Aufwand.
 
Mir hat ein PHP Forum den Tipp des urlencodes() gegeben.

Hier die Lösung, falls es mal wer braucht:

Java:
	try {
			p7 = URLEncoder.encode(lauf, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}

p7 als parameter an die url

und beim ausgeben sicherheitshalber decoden

Java:
	try {
			jTextField5.setText(URLDecoder.decode(nr.getLauf(), "UTF-8"));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}

Am PHP Skript musste nix geändert werden.

Grüße
 
Das Zeichen Þ wird in einem URL als %DE encodiert.
was im Imkehrschluss bedeutet, dass überall, wo in deiner Textdatei %de steht (z.B. ich habe den Typen vermöbelt), wird dieses komische Zeichen draus.
Um das zu vermeiden, solltest du also wahrscheinlich wirklich über das Standard-URL-Encoding nachdenken 😀
 
leerzeichen entsprechen dem zeichen 0x20 ... also dem 32ten zeichen des ASCII codes ...

folglich muss ein leerziechen in einer URL auch mit %20 kodiert werden ...
überall wo aber ein gültiger hex-wert entsteht %00 - %FF *also auch bei %DE* wir dies versucht anhand des zeichensatzes zu dekodieren ...

schreibe also anstatt nur "%" ein "%20" an die leerzeichen und schon sollte alles gehen

*entsprechend solltest du alle anderen sonderzeichen *wie umlaute und andere in einer url nicht erlaubte zeichen* entsprechende kodieren ...


alternativ : verwende "java.net.URLEncoder.encode("dein text", "utf-8");"
 
Danke für die Antworten, aber ich habe nun folgendes Problem, dass mir erst heute aufgefallen ist.
Sonderzeichen werden nicht richtig verarbeitet

aus
Code:
öäü
wird econdet das
Code:
%C3%B6%C3%A4%C3%BC

Java:
try {
				p6 = URLEncoder.encode(msg, "UTF-8");
			} catch (UnsupportedEncodingException e1) {
				e1.printStackTrace();
			}



und dannach in der PHP Datei folgendes geschrieben

öäü

Jemand jetzt ne Idee worans liegt?

In der PHP ist
Code:
	header("Content-Type: text/html; charset=utf-8");
drin.

Grüße
 
Zuletzt bearbeitet:
also im Encoder meines Vertrauens (URL Decoder/Encoder)kommt das hier raus:
%C3%A4%C3%B6%C3%BC

Also A4 und B6 vertauscht... keine Ahnung, welche Rolle das spielt, so genau kenn ich die Spezifikation zum Encoding nicht...

EDIT: oooh, hab´s gesehn, ich hatte äöü... in dem Fall, bitte ignorieren😳
 

Neue Themen


Zurück
Oben