# JAVA to php seltsames Fragezeichen in Ausgabe



## mäcjava (17. Okt 2011)

Hallo,

ich möchte für eine kleines privates Projekt eine php Schnittstelle für mein Java Programm verwendenes geht ums Prinzip - Alternativen kenne ich )

Dabei nutze ich das Script: Developer's Guide - Wie man aus Java mit einem PHP-Script kommuniziert

Mein Problem: Ich möchte den Rückgabewert der Funktion con.read() als String weiterverarbeiten.

Eigentlich kommt der Wert als String zurück, aber 

Die Ausgabe für:

```
con.send("u=test&p=test2");
System.out.println(con.read());
```

sieht so aus:
*
key:u=test key=test2 ?*

Meine Frage: Wo kommt das Fragezeichen her und warum kann ich den String nicht weiterverarbieten?


```
String returnp="";
returnp = con.read();
System.out.println("Wert:"+returnp);
```

gibt das aus:

*Wert:?*

Warum?


----------



## Tomate_Salat (17. Okt 2011)

zeig mal deinen kompletten PHP-Code.


----------



## mäcjava (18. Okt 2011)

Ich habe genau das script von der seite genommen. Testet das mal bei euch. Ich wette ihr habt auch das Fragezeichen..

Kennt jemand vielleicht noch eine andere Seite auf der die Verbindung zu einem php script erläutert wird?


----------



## Tomate_Salat (18. Okt 2011)

Ok, habe es mir angeschaut und du hast recht. Der Fehler war wohl beim lesen des Streams. Die read-Methode sollte so aussehen:
[java=85]
public String read() throws IOException {
	if (con == null) {
		con = sitepath.openConnection();
	}
	InputStream in = con.getInputStream();
	int c = 0;
	StringBuffer incoming = new StringBuffer();
	while ( (c=in.read())!=-1) {
        //while (c >= 0) {
		//c = in.read();
		incoming.append((char) c);
	}
	return incoming.toString();
}
[/code]

Zur übersicht habe ich mal das auskommentiert, was falsch war.


----------



## mäcjava (18. Okt 2011)

cool.. danke, das Frage zeichen ist jetzt weg

eine kleine Verständnisfrage hätte ich noch: Ich möchte die Rückgabe von con.read(); in einen String speichern. Das funktioniert aber nicht, der String  return_ph ist immer leer.


```
public static void main(String[] args) {
		String return_php="";	
try {
URL url = new URL("http://localhost/curl/contest.php");
PhpPostConnect con = new PhpPostConnect(url);
try {
con.send("u=test");

System.out.println("1. Wird ausgegeben:"+con.read());

return_php = con.read();



} catch (IOException e) {
e.printStackTrace();
}
} catch (MalformedURLException e) {
e.printStackTrace();
}

System.out.println("2. Variable wird nicht ausgegeben:"+return_php);
}
```

*Die Ausgabe ist:
1. Wird ausgegeben:
key:u=test 
2. Variable wird nicht ausgegeben:*

Was mache ich da falsch??


----------



## Tomate_Salat (18. Okt 2011)

Weil du den inputStream schon ausgelesen hast. Wenn du den Wert in einer Variable festhalten willst, musst du das vor der Ausgabe machen: (und achte auf Konventionen: variablen lowerCamelCase schreiben)

```
String returnPhp=con.read();
System.out.println("Ausgabe: " + returnPhp);
```


----------



## Empire Phoenix (18. Okt 2011)

Generell weils ichs gerade sehe, würde ich speizell bei Web schnittstellen immer das encoding in den in und outstreams angeben, auf das die API ausgelegt ist, sonst hat man ganz tolle fehler wennd as java progamm mal auf einem system mit anderen default encoding läuft.


----------



## mäcjava (18. Okt 2011)

Vielen Dank für die beiden Hinweise!!


----------

