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

 中凱kai 发布于 2023-01-07 15:59

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

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

我应该在其他角色的帮助下替换这些空格,以便我可以获得完整的字符串吗?

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

SMS Sent to SMPP : ????????? ????
Outpur Received from SMPP : 'A:'f3*'F
String back converted by iconv : ????????? 

英文字符串运作良好.

提前致谢.

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: ???????? ????
    

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

    2023-01-07 16:03 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有