簡體   English   中英

用PHP curl post / put編碼

[英]Encoding in PHP curl post/put

我正在嘗試通過PHP中的curl將JSON發送到REST Web服務。 當我使用英文字母時,它工作正常,但某些國際字符出現錯誤。

對於某些字符,例如Ð,ð和ó,我沒有收到錯誤消息,但是當我查看最終產品(我正在將數據傳輸到另一個數據庫)時,字母已被問號代替。 Só“ Óli ”成為“ ?li

對於其他字符,例如Þ,我從Web服務中收到500錯誤:“目標多字節代碼頁中不存在Unicode字符的映射”

當我嘗試使用iconv,utf8_encode,utf8_decode或mb_convert_encoding然后使用curl時,我得到的錯誤與Þ相同。

如果您想知道,其他數據庫確實允許使用國際字符(我可以直接將其輸入數據庫和/或使用CSV上載)。

我試過添加curl_setopt( $curl, CURLOPT_ENCODING, "" ); curl_setopt( $curl, CURLOPT_ENCODING, "UTF-8" ); 卷曲。

我嘗試添加header('Content-Type: text/html; charset=utf-8'); 到php文件(不確定是否會對curl產生任何影響,或者僅影響它在瀏覽器中的顯示方式)。

$json = '
{ 
"CardUniqueId": "1",
"PersonName": "Þæö"
}';

$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_URL, $uri . $action);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('api-key: '. $apikey));
curl_setopt( $curl, CURLOPT_ENCODING, "" ); 
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($curl, CURLOPT_POSTFIELDS,$json);
curl_setopt($curl,CURLOPT_POST, 1);
$resp = curl_exec($curl);
curl_close($curl);

我有什么要忘的嗎?

注意:我想我已經在使用相同的curl設置之前完成了此操作,沒有問題,但是已經有一段時間了,所以我可能會誤會。 但我提到這是因為Web服務的所有者有可能在其端進行了一些更改,從而導致了此問題。

您忘記了JSON是一種數據傳輸格式,而不僅僅是一個字符串。 使用它時,請使用適當的工具:

$data = ["CardUniqueId" => 1, "PersonName" => "Þæö"];
$json = json_encode($data);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM