gpt4 book ai didi

javascript - 从 php cURL 获取正确的编码

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:59:41 25 4
gpt4 key购买 nike

(见帖子底部的更新)

使用 Chrome 网络记录器,我注意到一个给定的 XHR 请求:

请求 header

GET ... HTTP/1.1
Host: ...
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
Origin: ...
Authorization: Jra45648WwbbQ
Accept: */*
Referer: ...
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: en-US,en;q=0.8

响应 header

HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Authorization, Origin, Content-Type, Accept, Referer, User-Agent, deportes
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin: ...
Access-Control-Expose-Headers: Authorization, x-request-id, x-mlbam-reply-after
Content-Type: application/octet-stream
Date: Sun, 16 Apr 2017 ... GMT
Server: nginx/1.11.3
Vary: Accept
X-Request-ID: ...
Content-Length: 16
Connection: keep-alive

响应内容为@EqV¡^MSÁ9

完美。这是正确的输出。

现在,我需要使用 cURL 在 PHP 中重新创建这个确切的交换。所以我使用相同的 header 复制请求。

    $ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_ENCODING => 'gzip',
CURLOPT_RETURNTRANSFER => true
));

然而,这里的输出是@EqV–¡^MSƒÁ’9,明显不同。

我需要以原始格式 (@EqV¡^MSÁ9) 获取它,因为最终 PHP 的输出将提供给 javascript 脚本,而 charCodeAt 的值 在这两个输出之间有不同的结果。我不确定如何解决这个问题。

Example of the two different outputs in Notepad++

可以看到,XHR请求后,Chrome中的响应预览是正确的:

Chrome Network Logger Preview

如果我将 PHP 页面输出的编码类型更改为 Western (ISO-8859-15),我将得到 @EqV¡^MSÁ9

如果我将该输出粘贴到 Notepad++ 中,我会得到一些与我想要的非常非常相似的东西,但仍然略有不同(在本例中,只有一个字符不同)。所以也许这非常接近我需要的编码?

Encoding

如何找到我需要的编码? chrome 的默认编码是什么,因为它似乎可以很好地处理响应?

更新:我测试了一个新值,òÝD¶0v¢ÔL·ßÈO Ó,并使用 mb_convert_encoding($r, 'utf-8' , 'ISO-8859-15') 给了我正确的结果。那么,为什么它对特定响应 (@EqV¡^MSÁ9) 进行编码,给我一个短字符的值?

最佳答案

Chrome 默认编码为 UTF-8,如果您将其设置为 UTF-8
curl_setopt($ch, CURLOPT_ENCODING, 'UTF-8'); 你的文本将如预期的那样你可以试试 here .
检测编码也很痛苦,因为使用 mb_detect_encoding 可能会遇到很多问题,但在这种情况下,如果您像这样指定预期的检测顺序,它会很有帮助:

mb_detect_encoding($val, 'UTF-8,ISO-8859-15');

根据我的个人经验,如果不指定目标并按正确的顺序进行排序是毫无值(value)的,例如,您需要在 ISO-8859-1 之前列出 UTF-8您的编码列表,否则在大多数情况下它将返回 ISO-8859-1

更新:
docCURLOPT_ENCODING => '' 处理你可以尝试的所有编码,但正如我所说,因为你正在处理一个已知的编码 UTF-8 请尝试

$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_ENCODING => 'UTF-8',
CURLOPT_RETURNTRANSFER => true
));

关于javascript - 从 php cURL 获取正确的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43439573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com