2016-05-31 99 views
2

我們正在開發一個應用程序,它很大程度上依賴於C#和PHP之間穩定的通信和數據傳輸。C# - PHP字符編碼不匹配


的計劃:

創建在C#中的桌面應用程序中,我們可以編輯得到通過使API請求到PHP服務器返回的值。


的問題

當發送包含特殊字符,例如值:使用C#RestClienté到PHP中,我們發現,在到達PHP API的價值得到了從改變例如:éé

在搜索一些關於此的信息後,我們發現這與字符編碼有關,PHP api使用utf-8和C#使用utf-8,據我們所知。


守則


發送和創建請求是C#的部分:

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); 

代碼的PHP/API部分:

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é已更改爲:André

我希望有人能幫助我們這個, 親切的問候, 傑弗裏

回答

0

你可以嘗試使html跳過字符串,以便將é更改爲é或者& eacute;在發送之前。

使用HttpUtility.HtmlEncode在PHP C#和html_entity_decode

+0

因爲你的字符串編碼爲一個URL編碼,你應該在PHP中使用urldecode($字符串) –