Laden...

Problem mit Umlauten bei HTTP Web Request

Erstellt von canuck vor 17 Jahren Letzter Beitrag vor 17 Jahren 3.053 Views
C
canuck Themenstarter:in
91 Beiträge seit 2006
vor 17 Jahren
Problem mit Umlauten bei HTTP Web Request

Hallo. Ich rufe aus meinem C# Webservice ein Php Skript auf welches mir ein Pdf File erzeugt. Dem Php Skript übergebe ich diverse String-Werte. Das schaut so aus:


// Php Pdf Skript aufrufen                       
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://test/phppdfscript/create_pdf.php?project_id=" + projectID + "&language=" + language + "&name=" + name + "&street=" + street + "&city=" + city + "&phone=" + phone + "&eurofactor=" + euroFactor);
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    response.Close();

Wenn nun etwa in der Variable 'name' Umlaute (äöü, etc.) vorkommen gibt es Probleme. In diesem Falle erhält das Php Skript dann z.B. für ö 'â$'..

Muss ich auf meiner Seite bei meinem HTTP Request betreffend Sonderzeichen irgendwas speziell berücksichtigen? Was gibt es für Möglichkeiten damit die Sonderzeichen korrekt übertragen werden?

Danke für eure Hilfe

M
1.439 Beiträge seit 2005
vor 17 Jahren

HttpServerUtility.UrlEncode

C
canuck Themenstarter:in
91 Beiträge seit 2006
vor 17 Jahren

Ich versuche es nun wie folgt:


url = "http://test/phppdfscript/create_pdf.php?project_id=" + projectID + "&language=" + language + "&name=" + name + "&street=" + street + "&city=" + city + "&phone=" + phone + "&eurofactor=" + euroFactor;
                    HttpServerUtility ut;
                    url = ut.UrlEncode(url); 

Leider kommt da der Fehler "Verwendung der nicht zugewiesenen lokalen Variablen ut ".

Was mache ich falsch?

3.170 Beiträge seit 2006
vor 17 Jahren

Halo,
wie wärs mit

HttpServerUtility ut = new HttpServerUtility();

EDIT:
Sorry, das geht ja gar nicht. Die HttpServerUtility kann man so nicht inkarnieren.
Aber wenns ein Webservice ist, hast Du irgendwo ein Server-Objekt, das ist vom Typ HttpServerUtility und darüber kannst Du den UrlEncode machen.
(HttpApplication.Server)

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

M
1.439 Beiträge seit 2005
vor 17 Jahren

NameValueCollection collection = new NameValueCollection();
		collection.Add("BV_SessionID", sessionId);
		collection.Add("BV_EngineID", engineId);
		collection.Add("pagePath", "null");
		collection.Add("pageType", "null");
		collection.Add("translatedPath", "/opt/docs/web/onechp/onechp/home/home.do");
		collection.Add("navFlag", "top");
		collection.Add("action", "checkUser_top");
		collection.Add("userId", properties.UserId);
		collection.Add("password", properties.Password);
		collection.Add("login", "Login");
		
		StringBuilder sBuild = new StringBuilder();
		for (int i = 0; i < collection.Count; i++) {
			string key = collection.GetKey(i);
			string val = collection.GetValues(i)[0];
			
			sBuild.Append(HttpUtility.UrlEncode(key));
			sBuild.Append('=');
			sBuild.Append(HttpUtility.UrlEncode(val));
			
			if (i + 1 < collection.Count) {
				sBuild.Append('&');
			}
		}


C
canuck Themenstarter:in
91 Beiträge seit 2006
vor 17 Jahren

da kommt

"Der Typ System.Web.HttpServerUtility hat keine definierten Konstruktoren."

ich habe es nun so gelöst:


string url = "";
string urlencoded = "";

url = "http://test/phppdfscript/create_pdf.php?project_id=" + projectID + "&language=" + language + "&name=" + name + "&street=" + street + "&city=" + city + "&phone=" + phone + "&eurofactor=" + euroFactor;
                   
                    Server.UrlEncode(url);
                    urlencoded = url.ToString();

M
1.439 Beiträge seit 2005
vor 17 Jahren

Ja, entschuldigung ich habe die erste Klasse(und falsche) verwendet. Du kannst HttpUtility verwenden.
Oder in deinem Context Server.UrlEncode.

Beachte aber, nicht die ganze Url zu encodieren, sondern nur die einzelnen Parameter.

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo canuck,

das ist mir eben auch gerade eingefallen, habe den letzten Beitrag aber zu spät editiert. Server.UrlEncode ist aber genau richtig!

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

C
canuck Themenstarter:in
91 Beiträge seit 2006
vor 17 Jahren

hm, leider funktioniert es nicht. Obwohl ich alle Variablen die ich in die URL einsetze codiere

Das Php Skript erhält immer noch z.B. anstelle von ö das Kürzel ö

T
243 Beiträge seit 2006
vor 17 Jahren

Du musst im PHP-Script dann noch die Parameter mit urldecode() bearbeiten, denke ich...

C
canuck Themenstarter:in
91 Beiträge seit 2006
vor 17 Jahren

bringt auch nichts..

also bei mir im C# Webservice schreibe ich die selbe codierte Variabel 'nameencoded' nun in ein Textfile rein. Dort sind die Umlaute, Leerzeichen, etc. korrekt codiert.

Sobald ich die selbe Variable dann aber mittels HttpWebRequest dem Php Skript übergebe bekommt das Php Skript immer jeweils falsche Werte für die Umlaute.

Im Php Skript schreibe ich die Werte nun auch direkt in ein Textfile rein. Leider erscheinen aber dort nicht die codierten Werte wie auf seiten des Webservice..

************************
Keine Ahnung wo das Problem lag. Ich und der Programmierer des Php Skripts haben es nun so gelöst dass die Werte in die Datenbank geschrieben werden und er Sie wieder herausliest..