[英]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.