我在C#.NET中编写一个服务,它接收一些数据,生成XML字符串,并将其发布到Web服务。
我的工作正常,但现在我想在C#端对64位进行编码,并在Web服务端用PHP解码。
出现问题,因为解码在PHP端没有按预期工作
在PHP方面,我只是做
$xml = trim(base64_decode($_POST['xmlpost']));
从webservice到webservice可以正常工作。
这是C#代码:
string xml = ###XMLHERE###;
WebRequest request = (HttpWebRequest)WebRequest.Create(liveURL);
//base 64 encode
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(xml);
string byteArrayEncoded = System.Convert.ToBase64String(plainTextBytes, 0, plainTextBytes.Length);
byte[] byteArray = Encoding.UTF8.GetBytes("xmlpost=" + byteArrayEncoded + "&test=1");
//send request
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
request.Method = "POST";
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
我知道XML格式是正确的,因为它没有编码就可以正常工作。我做错了什么?
旁注:在我修复此问题后,我还尝试确保单引号,双引号和&符号可以在XML节点文本中,如果有人也可以帮助我。
答案 0 :(得分:1)
base64编码使用+,/和=等字符,必须在URL编码的表单数据中进行转义。这样的事情可以为你带来更好的结果。
string byteArrayEncoded = System.Convert.ToBase64String(plainTextBytes, 0, plainTextBytes.Length);
string byteArrayUrlEncoded = System.Web.HttpUtility.UrlEncode(byteArrayEncoded);
byte[] byteArray = Encoding.UTF8.GetBytes("xmlpost=" + byteArrayUrlEncoded + "&test=1");