当前位置: 首页 > 编程笔记 >

php使用iconv中文截断问题的解决方法

赫连宏伯
2023-03-14
本文向大家介绍php使用iconv中文截断问题的解决方法,包括了php使用iconv中文截断问题的解决方法的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了php使用iconv中文截断问题的解决方法。分享给大家供大家参考。具体分析如下:

今天做了一个采集程序,原理很简单,使用curl方法把对方页面的html获取分析,然后正则提取需要的数据并保存在数据库。

由于对方页面是GB2312编码,而本地使用的是UTF-8编码。因此在采集后需要进行编码转换。

使用了iconv方法进行编码转换

iconv — 字符串按要求的字符编码来转换 
string iconv ( string $in_charset , string $out_charset , string $str )

将字符串 str 从 in_charset 转换编码到 out_charset 。  

转换的方法很简单,直接使用iconv方法就可以了

<?php 
$content = iconv('GB2312', 'UTF-8', $content); //$content为采集到的内容 
?> 

试验了几个页面,都能正常采集。但在之后的采集中,有几个页面采集不完整。
一开始考虑是否正则有错,检查后排除此问题。经过排查,发现经过iconv转码后的内容比采集的内容少了一大段。
查看apache log,看到提示:Notice: iconv(): Detected an illegal character in input string。

翻查手册,看到以下说明

如果你在 out_charset 后添加了字符串 //TRANSLIT,将启用转写(transliteration)功能。这个意思是,当一个字符不能被目标字符集所表示时,它可以通过一个或多个形似的字符来近似表达。

如果你添加了字符串 //IGNORE,不能以目标字符集表达的字符将被默默丢弃。 否则, str 从第一个无效字符开始截断并导致一个 E_NOTICE 。

原来iconv遇到不能识别的内容,会从第一个不能识别的字符开始截断,并生成一个E_NOTICE。因此后边的内容被丢弃了。

而在输出字符集后加上//IGNORE则只丢弃不能识别的内容,而不会截断和丢弃后面的内容。

修改程序后一切正常

<?php 
$content = iconv('GB2312','UTF-8//IGNORE',$content);//$content为采集到的内容
?> 

Tips:使用iconv时,如果要使用UTF-8编码的,请使用UTF-8而不要使用UTF8,因为UTF8有些服务器会有问题。

希望本文所述对大家的php程序设计有所帮助。

 类似资料:
  • 本文向大家介绍PHP中iconv函数转码时截断字符问题的解决方法,包括了PHP中iconv函数转码时截断字符问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 iconv是转换编码的,但是在中文转码时候出现显示不全问题。    或者用mb_convert_encoding()   保险就用mb_conver_encoding 

  • 本文向大家介绍PHP使用strrev翻转中文乱码问题的解决方法,包括了PHP使用strrev翻转中文乱码问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP使用strrev翻转中文乱码问题的解决方法。分享给大家供大家参考,具体如下: 在用PHP中的strrve翻转中文时,会出现乱码情况 例如: 运行结果为: 解决方法就是自己重写一个cnstrrev的函数 运行结果为: 更多

  • 本文向大家介绍input 中空格截段的问题解决方法,包括了input 中空格截段的问题解决方法的使用技巧和注意事项,需要的朋友参考一下 现在我要把记录中的一个字段在input 中显示出来 写法如下: 可是出问题了 如果数据库中要显示的字段是:a b c d 而不是abcd 实际运行中在input中只将a显示了出来 解决办法:

  • 前端Vue导出pdf文件,用的html2canvas和jspdf依赖,已经解决分页和字体内容模糊问题,但是会出现文字遭拦腰截断这种情况,有做过得相同经验么?

  • 本文向大家介绍解决Pandas的DataFrame输出截断和省略的问题,包括了解决Pandas的DataFrame输出截断和省略的问题的使用技巧和注意事项,需要的朋友参考一下 我们看一个现象: Titanic_data.csv是kaggle上的泰坦尼克数据集,通过pandas读入到一个dataframe中,我们看看其前5行记录。输出结果如下: 可以看到,记录被分成了3段截断输出,如果想在一行输出,

  • 本文向大家介绍php关闭warning问题的解决方法,包括了php关闭warning问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 error_reporting 设定错误讯息回报的等级 2047我记得应该是E_ALL。 php.ini 文件中有许多配置设置。您应当已经设置好自己的php.ini 文件并把它放在合适的目录中,就像在 Linux 上安装PHP 和 Apache 2 的文档说明