Я использую онлайн-сервис смс (Clickatell) для веб-приложения, которое я использую. Мой основной язык — греческий, поэтому мне нужно конвертировать в своем php-файле текст SMS в UTF-16BE, прежде чем я отправлю его. Например мне нужно конвертировать текст
«Ο ραντεβού σας έχει μεταφερθεί στις 12-12-2016 και ώρα 18:25»
в
03a403bf002003c103b103bd03c403b503b203bf03cd002003c303b103c2002003ad03c703b503b9002003bc03b503c403b103c603b503c103b803b503af002003c303c403b903c2002000310032002d00310032002d0032003000310036002003ba03b103b9002003ce03c103b1002000310038003a00320035
Мне нужно конвертировать все, включая пробелы, символы и цифры.
Я нашел несколько команд php, но они конвертируют только текст.
$text=strtoupper(str_replace(array('"', '\u'), array('',''), json_encode('Το ραντεβού σας έχει μεταφερθεί στις 12-12-2016 και ώρα 18:25')));
При использовании приведенного выше кода я получаю следующий результат:
03A403BF 03C103B103BD03C403B503B203BF03CD 03C303B103C2 03AD03C703B503B9 03BC03B503C403B103C603B503C103B803B503AF 03C303C403B903C2 12-12-2015 033B3 03B3 03B3S3
Если вы заметили дату и время, а также все пробелы не в Unicode.
Может кто-нибудь сказать мне, как получить всю мою фразу в Unicode? Как я могу сделать это с php?
заранее спасибо
Я не уверен, что вы подразумеваете под «они конвертируют только текст», но если вы хотите конвертировать UTF-8
строка в UTF-16BE
, тогда вы можете попробовать:
iconv('UTF-8', 'UTF-16BE', $string);
или же..
mb_convert_encoding($string, 'UTF-16BE', 'UTF-8');
Редактировать:
Поскольку вы уже поделились некоторым кодом, ваша техника преобразования не является надежной, если вы действительно не хотите, чтобы он был представлен так, как у вас. Ваш результат в основном представляет собой шестнадцатеричное представление отдельных байтов, но не сами байты.
Изменить 2:
Если вам действительно нужно это в указанном формате, следующее сделает это за вас:
$string = iconv('UTF-8', 'UTF-16BE', $string); // .. or mb_convert_encoding
$converted = '';
for ($i = 0; $i < strlen($string); $i++) {
$converted .= sprintf('%02X', ord($string[$i]));
}
Других решений пока нет …