У меня есть приложение, которое принимает символы в кодировке UTF8 и должно отправить их как часть xml через curl с кодировкой ISO-8859-1.
Это мой тестовый код:
header('Content-Type: text/plain; charset=IS0-8859-1');
$message = '§ ° " @ # € % & / ( ) = + ` ´ ^ ¨ * - _ : . ; ,';
echo mb_convert_encoding($message, 'ISO-8859-1', 'UTF-8');
//build xml to post
$content =
'<?xml version="1.0" encoding="ISO-8859-1"?>
<mobilectrl_sms>
<header>
<customer_id>'.CUSTOMER_ID.'</customer_id>
<password>'.PASSWORD_ID.'</password>
</header>
<payload>
<sms account="'.SHORT_CODE.'">
<message><![CDATA['.mb_convert_encoding($message, 'ISO-8859-1', 'UTF-8').']]></message>
<to_msisdn>+12345678900</to_msisdn>
</sms>
</payload>
</mobilectrl_sms>';
$posturl = MT_URL;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $posturl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml", "Content-length: ".strlen($content), "charset=ISO-8859-1"));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
В браузере это почти работает, я вижу § ° "@ #?% & / () = +` ´ ^ ¨ * - _:.;,
обратите внимание на знак евро €
Но когда оно приходит в виде текстового сообщения, я вижу §? "@ #?% & / () = +??^?* - _:.;,
Я не могу понять это, я пробовал также utf8_decode, но, кажется, это еще хуже.Я что-то упустил?
Спасибо