如何使用 PHP 和 CURL 编码外来字符以通过 API 导入到 shopify
How to encode foreign characters for importing to shopify via API using PHP and CURL
我正在尝试通过 API 将我们的客户从我们的 Magento 站点导入到 Shopify。我正在使用 PHP 和 CURL
我的脚本对我们的大多数客户来说工作正常,但它在处理任何包含外来字符的名称时遇到问题,当回显包含外来字符的变量和 API 调用时,我得到问号符号只是失败,没有创建客户。
奇怪的是,如果我将 JSON 对象复制到 Insomnia 中,并且 运行 调用 API 它即使使用外来字符也能正常工作,所以我假设 Insomnia 正在为我的脚本添加一些编码不是。
我假设我遇到了字符集问题,但不确定我需要将其更改为什么,或者我是否设置错误。
这是我的 Curl 代码:
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_VERBOSE, 0);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POSTFIELDS, $json_string);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec ($curl);
curl_close ($curl);
我也试过将其声明为 UTF-8
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json;charset=UTF-8'));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_VERBOSE, 0);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POSTFIELDS, $json_string);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec ($curl);
curl_close ($curl);
有什么明显的错误吗?
谢谢
听起来你好像忘了正确处理 UTF-8。每当你看到一个问号时,它就表明你有一个编码错误。这意味着您的源数据被破坏了。这意味着源数据是 UTF-8,然后您将其读取为 ASCII,不能正确执行 UTF-8,因此 Shopify 将看到垃圾,因为它使用 UTF-8 编码。
如果您使用 mysqli
数据库连接从 Magento 获取数据,您可能需要将连接的字符集设置为 utf8,以便 PHP 从数据库中正确获取数据:
$mysqli->set_charset("utf8")
我正在尝试通过 API 将我们的客户从我们的 Magento 站点导入到 Shopify。我正在使用 PHP 和 CURL
我的脚本对我们的大多数客户来说工作正常,但它在处理任何包含外来字符的名称时遇到问题,当回显包含外来字符的变量和 API 调用时,我得到问号符号只是失败,没有创建客户。
奇怪的是,如果我将 JSON 对象复制到 Insomnia 中,并且 运行 调用 API 它即使使用外来字符也能正常工作,所以我假设 Insomnia 正在为我的脚本添加一些编码不是。
我假设我遇到了字符集问题,但不确定我需要将其更改为什么,或者我是否设置错误。
这是我的 Curl 代码:
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_VERBOSE, 0);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POSTFIELDS, $json_string);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec ($curl);
curl_close ($curl);
我也试过将其声明为 UTF-8
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json;charset=UTF-8'));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_VERBOSE, 0);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POSTFIELDS, $json_string);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec ($curl);
curl_close ($curl);
有什么明显的错误吗?
谢谢
听起来你好像忘了正确处理 UTF-8。每当你看到一个问号时,它就表明你有一个编码错误。这意味着您的源数据被破坏了。这意味着源数据是 UTF-8,然后您将其读取为 ASCII,不能正确执行 UTF-8,因此 Shopify 将看到垃圾,因为它使用 UTF-8 编码。
如果您使用 mysqli
数据库连接从 Magento 获取数据,您可能需要将连接的字符集设置为 utf8,以便 PHP 从数据库中正确获取数据:
$mysqli->set_charset("utf8")