Я пытаюсь отправить 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);
Есть ли что-нибудь, что яя забыл?
Примечание: я думаю, что сделал это до того, как использовал те же настройки скручивания, без проблем, но это было какое-то время, поэтому я могу ошибаться.Но я упоминаю об этом, поскольку существует вероятность того, что владелец веб-службы внес некоторые изменения с их стороны, вызывая эту проблему.