У меня есть сценарий PHP, который вызывается через веб-перехватчик Twilio для входящих SMS. Сообщения приходят с данными публикации, которые я записываю с помощью:
$Message = $_POST["Body"];
Затем, используя Twilio PHP SDK, это сообщение пересылается обратно на мобильный телефон через:
$relay = new Client($sid, $token);
try {
$relay->messages->create(
'+15558675310',
array(
'from' => '+15555555555',
'body' => $Message
)
);
}
catch (Exception $e) {
$TwilioError = "Error: " . $e->getMessage();
}
Достаточно просто и отлично работает. Проблема в том, что смайлы не переводятся должным образом и отправляются в искаженном виде. Смайлик должен выглядеть следующим образом: 😠€
В журналах Twilio входящее сообщение будет отображаться со смайликом, но это всего лишь HTML-представление. Журнал не показывает, какая кодировка (при условии UTF-8). В журнале Twilio исходящего сообщения указано, что используется кодировка UCS2.
Кодировка веб-сервера по умолчанию - UTF-8.
Что нужно сделать, используя PHP 5.6, с сообщением, поступающим от Twilio с возможными смайликами в содержимом, перед отправкой обратно через Twilio PHP SDK?
php.ini: default_charset = "UTF-8" Также: заголовок ("Content-Type: text / html; charset = " utf-8 ");






Решено. Частично моя проблема заключалась в вызове stripslashes () в $ _REQUEST ['Body'], вероятно, по привычке для помощи в других гнусных значениях поста. Таким образом, он удалял байты эмодзи UTF-8.
Как только это было удалено, я смог отправить смайлик. Для хранения эмодзи для целей регистрации использование функции сущностей, предоставляемой @PetrHejda ниже, работает безупречно.
Проповедник разработчиков Twilio здесь. Для информации: все операции между вашим приложением и Twilio должны выполняться в UTF-8. UCS2 - это кодировка, которую Twilio использует для отправки сообщения в телефонную сеть, но Twilio переводит ее в UTF-8 и обратно, чтобы упростить работу. Когда вы говорите, что кодировка веб-сервера по умолчанию - UTF-8, где это установлено? Можете ли вы из своего PHP-приложения напечатать символ эмодзи в журнале или на странице вывода?