iconv():检测到输入字符串中的非法字符

时间:2014-06-26 06:48:45

标签: php utf-8 utf-16 iconv smpp

我正在使用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;

我收到了以下输出 enter image description here
如果我有一个dari和pashto语言字符串,那么它只显示第一个单词,并且在空格后不返回剩余的字符串。甚至// IGNORE也提供相同的输出。

我是否应该借助其他角色替换这些空格,以便我可以获得完整的字符串?

注意:我正在传递从SMPP(接收方)收到的字符串。

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

英文字符串运作良好。

提前致谢。

1 个答案:

答案 0 :(得分:5)

您正在此行上将字符串转换为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: فغانستان کابل

至于空格,请你分享测试字符串吗?