Как кодировать иностранные символы для импорта в shopify через API с помощью PHP и CURL

Я пытаюсь импортировать наших клиентов с нашего сайта Magento в Shopify через API. Я использую 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);

Есть ли что-то очевидное, что я ошибся?

Спасибо

Я думаю, вам нужно проверить код PHP CURL от Insomnia, который успешно отправил данные в Shopify API. в Insomnia & Postmen есть возможность проверять код на разных языках. Может помочь вам.

Onkar 18.12.2020 05:38
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
1
325
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Похоже, вы забываете правильно обращаться с UTF-8. Всякий раз, когда вы видите вопросительный знак, это показывает вам ошибку кодирования. Это означает, что ваши исходные данные были искажены. Это означает, что исходные данные были UTF-8, а затем вы читаете их как ASCII, которые не могут правильно обрабатывать UTF-8, поэтому Shopify увидит мусор, поскольку он работает с кодировкой UTF-8.

Ответ принят как подходящий

Если вы используете соединение с базой данных mysqli для извлечения данных из Magento, вам может потребоваться установить кодировку соединения на utf8, чтобы PHP правильно получал данные из базы данных:

$mysqli->set_charset("utf8")

помогите мне в этом stackoverflow.com/questions/65359210/…

BugsCreator 18.12.2020 16:11

Это была моя проблема, она читалась из БД на латинице. Спасибо!

user3914769 21.12.2020 12:40

Другие вопросы по теме