我使用GuzzleHTTP 6.0从API服务器获取数据。由于某种原因,API服务器接收的请求不是UTF-8编码,字符ü,ö,ä,ß
是乱码。
我的默认系统和数据库是UTF-8
编码的。
我在debug
中将true
设置为RequestOptions
这是输出:
User-Agent: GuzzleHttp/6.2.1 curl/7.47.0 PHP/7.0.22-0ubunut0.16.04.1
Content-type: text/xml;charset="UTF-8"
Accept: text/xml" Cache-Control: no-cache
Content-Length: 2175 * upload completely sent off: 2175 out of 2175 bytes
<HTTP/1.1 200 OK <Server:Apache:Coyote/1.1 <Content-Type: text/xml; charset=utf-8 <Transfer-Encoding: chunked <Date: Thu, 23 Nov 2017 9:34:12 GMT <* Connection #5 to host www.abcdef.com left intact
我已将标题内容明确设置为UTF-8;
$headers = array(
'Content-type' => 'text/xml;charset="utf-8"',
'Accept' => 'text/xml',
'Content-length' => strlen($requestBody),
);
我还尝试使用mb_detect_encoding()
方法进行测试
mb_detect_encoding($requestBody,'UTF-8',true); // returns UTF-8
任何进一步的想法如何调试此问题.. ??
答案 0 :(得分:0)
Content-Length
必须包含字节数,而不是字符数。这可能是您使用mbstring.func_overload
的原因。尝试省略此标题的手动设置,Guzzle将以正确的方式自动设置它。