2017-11-23 49 views
0

GuzzleHTTP 6.0を使用してAPIサーバーからデータを取得します。何らかの理由で、APIサーバが受け取る要求がUTF-8でエンコードされていない場合、ü,ö,ä,ßの文字は文字化けしています。Guzzle HTTPリクエストで文字化けが発生する

デフォルトのシステムとデータベースは、UTF-8がエンコードされています。

私は、これが出力されるRequestOptionstruedebugに設定:

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

IはUTF-8にexplicitilyヘッダの内容を設定しています。

$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

Content-Lengthには、文字数ではなく、バイト数を含める必要があります。 mbstring.func_overloadを使用すると、その理由が考えられます。このヘッダーのマニュアルセットを省略すると、Guzzleはそれを自動的に正しい方法で設定します。

関連する問題