iconv(): обнаружен недопустимый символ во входной строке

Я использую функцию Iconv для преобразования строки в запрошенную кодировку символов. Посмотрите на код ниже

$sms_text =  'A:'f3*'F'; // Output received from SMPP
$result = iconv('UTF-16BE' ,'UTF-8//IGNORE' , $sms_text);
echo 'Ignore: ' .$result;

echo $sms_text = iconv('UTF-16BE' ,'UTF-8' , $sms_text);

$result1 = iconv('UTF-16BE' ,'UTF-8//TRANSLIT' , $sms_text); //line no (53)
echo 'Transilt: '.$result1;

И я получил приведенный ниже вывод введите описание изображения здесь
Если у меня есть строка дари и пушту Язык , то он показывает только первое слово и не возвращает оставшуюся строку после пробела. Даже //IGNORE дает тот же результат.

Должен ли я заменить эти пробелы с помощью какого-либо другого символа, чтобы я мог получить полную строку?

Примечание. Я передаю строку, полученную от SMPP (получатель).

SMS Sent to SMPP : افغانستان کابل
Outpur Received from SMPP : 'A:'f3*'F
String back converted by iconv : افغانستان 

Английская строка работает хорошо.

Заранее спасибо.


person Sushil Kandola    schedule 26.06.2014    source источник


Ответы (1)


Вы конвертируете строку в кодировку UTF-8 в этой строке:

echo $sms_text = iconv('UTF-16BE' ,'UTF-8' , $sms_text);

Ошибка появляется, потому что вы пытаетесь преобразовать его во второй раз. Чтобы решить эту проблему, вы не должны обновлять переменную $sms_text в указанной строке.

Вот код и вывод, который работает для меня:

$sms_text ="فغانستان کابل";

echo "UTF-8 : $sms_text \n";

$sms_text = iconv('UTF-8', 'UTF-16BE', $sms_text);

echo "UTF-16BE : $sms_text \n";

echo 'Ignore: ' . iconv('UTF-16BE' ,'UTF-8//IGNORE' , $sms_text) . "\n";
echo 'Simple: ' . iconv('UTF-16BE' ,'UTF-8' , $sms_text) . "\n";
echo 'Transilt: '. iconv('UTF-16BE' ,'UTF-8//TRANSLIT' , $sms_text) . "\n";

Выход:

UTF-8 : فغانستان کابل 
UTF-16BE : A:'F3*'F
Ignore: فغانستان کابل
Simple: فغانستان کابل
Transilt: فغانستان کابل

Что касается пробелов, не могли бы вы поделиться тестовой строкой?

person Sergii Ivashchenko    schedule 26.06.2014
comment
Уважаемый @sergey, я назначаю $sms_text=A:'F3*'F для $sms_text, потому что это закодированная строка, возвращаемая SMPP в формате UTF-16BE. - person Sushil Kandola; 26.06.2014
comment
SMS на SMPP: فغانستان کابل (UTF-8) SMPP TO Me ($sms_text): A:'F3*'F (UTF-16BE) Вывод должен быть: A:'F3*'F на فغانستان کابل (UTF-16BE на УТФ-8) - person Sushil Kandola; 26.06.2014
comment
Похоже, вы получаете $sms_text и назначаете его $result. Но вы не должны ничего присваивать $sms_text в своем фрагменте кода. - person Sergii Ivashchenko; 26.06.2014
comment
Просто попробуйте удалить $sms_text = из строки 51 (третья строка кода в вашем образце) или заменить на $result2 = - person Sergii Ivashchenko; 26.06.2014
comment
Не могли бы вы также показать, как вы отправляете сообщение? - person Sergii Ivashchenko; 26.06.2014
comment
Нет, я просто получаю с помощью SMPP Receiver. Сообщения отправляются откуда-то еще. Я просто читаю смс с этого мобильного устройства. - person Sushil Kandola; 26.06.2014
comment
Давайте продолжим это обсуждение в чате. - person Sergii Ivashchenko; 26.06.2014