Кодирование в PHP curl post / put - PullRequest
       1

Кодирование в PHP curl post / put

0 голосов
/ 02 октября 2018

Я пытаюсь отправить JSON через curl в PHP на веб-сервис REST.Он отлично работает, когда я использую английские буквы, но я получаю ошибки для некоторых международных символов.

Для некоторых символов, таких как Ð, ð и ó, я не получаю сообщение об ошибке, но когда япосмотрите на конечный продукт (я передаю данные в другую базу данных), буквы были заменены знаками вопроса.Só "Óli" становится "?li"

Для других символов, таких как Þ, я получаю ошибку 500 от веб-службы: "Нет сопоставления для символа Unicode в целевом многобайтовом кодекодовая страница "

Когда я пытаюсь использовать iconv, utf8_encode, utf8_decode или mb_convert_encoding и затем использую curl, я получаю ту же ошибку, что и с Þ.

В случае, если вам интересно, другойВ базе данных разрешены международные символы (я могу ввести их непосредственно в базу данных и / или загрузить с помощью CSV).

Я пытался добавить curl_setopt( $curl, CURLOPT_ENCODING, "" ); и curl_setopt( $curl, CURLOPT_ENCODING, "UTF-8" ); к скручиванию.

Я пытался добавить header('Content-Type: text/html; charset=utf-8'); в php-файл (не уверен, влияет ли это на curl или влияет только на его отображение в браузере).

$json = '
{ 
"CardUniqueId": "1",
"PersonName": "Þæö"
}';

$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_URL, $uri . $action);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('api-key: '. $apikey));
curl_setopt( $curl, CURLOPT_ENCODING, "" ); 
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($curl, CURLOPT_POSTFIELDS,$json);
curl_setopt($curl,CURLOPT_POST, 1);
$resp = curl_exec($curl);
curl_close($curl);

Есть ли что-нибудь, что яя забыл?

Примечание: я думаю, что сделал это до того, как использовал те же настройки скручивания, без проблем, но это было какое-то время, поэтому я могу ошибаться.Но я упоминаю об этом, поскольку существует вероятность того, что владелец веб-службы внес некоторые изменения с их стороны, вызывая эту проблему.

1 Ответ

0 голосов
/ 02 октября 2018

Вы забываете, что JSON - это формат передачи данных, а не просто строка.При работе с ним используйте соответствующие инструменты:

$data = ["CardUniqueId" => 1, "PersonName" => "Þæö"];
$json = json_encode($data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...