我们正致力于一个依赖于C#和PHP之间稳定的通信和数据传输的应用程序。
计划:
在C#中创建桌面应用程序,我们可以通过向PHP服务器发出api请求来编辑返回的值。
问题
当使用C#é
类向PHP发送包含特殊字符的值(例如:RestClient
)时,我们发现在到达PHP api时,值已从例如:{{ 1}}到é
。
在搜索了一些有关此信息的信息后,我们发现这与字符编码有关,PHP api使用é
而C#使用utf-8
就我们所知。
守则
发送和创建请求的C#部分是:
utf-8
代码的PHP / api部分:
string tmp = JsonConvert.SerializeObject(deelname);
client = new RestClient((local) ? "http://rotserver" : "https://registrations.roundtexel.com/");
var request = new RestRequest((local) ? "?action=deelname" : "api/bewerk", Method.POST);
request.AddParameter("username", (local) ? Convert.ToBase64String(Encoding.UTF8.GetBytes(User)) : User);
request.AddParameter("type", (local) ? Convert.ToBase64String(Encoding.UTF8.GetBytes("deelname")) : "deelname");
request.AddParameter("inschrijf_id", (local) ? Convert.ToBase64String(Encoding.UTF8.GetBytes(inschrijf_id)) : inschrijf_id);
request.AddParameter("stuurman_id", (local) ? Convert.ToBase64String(Encoding.UTF8.GetBytes(stuurman_id)) : stuurman_id);
request.AddParameter("bemanning_id", (local) ? Convert.ToBase64String(Encoding.UTF8.GetBytes(bemanning_id)) : bemanning_id);
request.AddParameter("voertuig_id", (local) ? Convert.ToBase64String(Encoding.UTF8.GetBytes(voertuig_id)) : voertuig_id);
request.AddParameter("boot_id", (local) ? Convert.ToBase64String(Encoding.UTF8.GetBytes(boot_id)) : boot_id);
request.AddParameter("content", (local) ? Convert.ToBase64String(Encoding.UTF8.GetBytes(tmp)) : tmp);
IRestResponse response = client.Execute(request);
由于public function __construct() {
$this->db = new PDO('mysql:host=localhost;dbname=xxxxxx', 'xxxxxx', 'xxxxxx');
$this->db->exec("SET names utf8;");
}
public function execute(){
$content = json_decode($_POST['content']);
#Stuurman
$stuurman_id = $_POST['stuurman_id'];
$stuurman = $content->deelnemerStuurman;
$stmnt = $this->db->prepare("UPDATE `~deelnemer` SET voornaam=?, tussenvoegsel=?, achternaam=?, adres=?, huisnummer=?, toevoeging=?, postcode=?, woonplaats=?, provincie=?, geslacht=?, geboortedatum=?, nationaliteit=(SELECT id FROM `~nationaliteiten` WHERE nationaliteit=?), licentie=1, licentie_nummer=?, telefoonnummer=?, mobielenummer=?, noodnummer=?, email=?, afbeeldingsnaam=?, whatsapp_registratie=? WHERE id=?");
$stmnt->execute(Array($stuurman->voornaam, $stuurman->tussenvoegsel, $stuurman->achternaam, $stuurman->adres, $stuurman->huisnummer, $stuurman->toevoeging,$stuurman->postcode,$stuurman->woonplaats, $stuurman->provincie, $stuurman->geslacht, $stuurman->geboortedatum,$stuurman->land, $stuurman->licentie_nummer, $stuurman->telefoonnummer, $stuurman->mobielenummer, $stuurman->noodnummer, $stuurman->email, $stuurman->afbeeldingsnaam, $stuurman->whatsapp_registratie, $stuurman_id));
var_dump($stuurman->voornaam);
$tmp = "{status: 'success'}";
return $tmp;
}
我们发现名称:var_dump
已更改为:André
我希望有人可以帮助我们, 亲切的问候, 杰弗里
答案 0 :(得分:0)
您可以尝试html转义字符串,以便将é更改为é或者& eacute;在发送之前。
在c#中使用HttpUtility.HtmlEncode,在php中使用html_entity_decode