iconv 中文截断问题的解决方法
2019独角兽企业重金招聘Python工程师标准>>>
iconv 中文截断问题的解决方法
今天做了一个采集程序,原理很简单,使用curl方法把对方页面的html获取分析,然后正则提取需要的数据并保存在数据库。
由于对方页面是GB2312编码,而本地使用的是UTF-8编码。因此在采集后需要进行编码转换。
使用了iconv方法进行编码转换
[php] view plain copy
iconv — 字符串按要求的字符编码来转换
string iconv ( string $in_charset , string $out_charset , string $str )
将字符串 str 从 in_charset 转换编码到 out_charset 。
转换的方法很简单,直接使用iconv方法就可以了
[php] view plain copy
<?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] view plain copy
<?php
$content = iconv('GB2312', 'UTF-8//IGNORE', $content); // $content为采集到的内容
?>
Tips:使用iconv时,如果要使用UTF-8编码的,请使用UTF-8而不要使用UTF8,因为UTF8有些服务器会有问题。
转载于:https://my.oschina.net/yonghan/blog/632609
iconv 中文截断问题的解决方法相关推荐
- C# .net中cookie值为中文时的乱码解决方法
C# .net中cookie值为中文时的乱码解决方法 一.cookie的名称或子cookie的名称不能为中文,否则无法获得cookie 这个好办,名称不用中文即可 二.cookie的值为中文时候,取c ...
- php gbk json_encode,php中json_encode处理gbk与gb2312中文乱码问题的解决方法
这篇文章主要介绍了php中json_encode处理gbk与gb2312中文乱码问题的解决方法,需要的朋友可以参考下 本文讲述了php中json_encode处理gbk与gb2312中文乱码问题的解决 ...
- php pdo 中文乱码,php pdo oracle中文乱码的快速解决方法
在/etc/profile.d/简历oracle.sh 内容如下在NLS_LANG设置编码ORACLE_HOME=/usr/lib/oracle/12.1/client64 C_INCLUDE_PAT ...
- jquery.ajax的url中传递中文乱码问题的解决方法
jquery.ajax的url中传递中文乱码问题的解决方法 JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQuer ...
- php函数substr_replace中文乱码的替代解决方法
php函数substr_replace中文乱码的替代解决方法 参考文章: (1)php函数substr_replace中文乱码的替代解决方法 (2)https://www.cnblogs.com/ty ...
- mysql编写中文时变成问号解决方法
mysql编写中文时变成问号解决方法 参考文章: (1)mysql编写中文时变成问号解决方法 (2)https://www.cnblogs.com/yangzhixue/p/11449525.html ...
- Python 中文注释报错解决方法
Python 中文注释报错解决方法 参考文章: (1)Python 中文注释报错解决方法 (2)https://www.cnblogs.com/cjiong/p/5881983.html 备忘一下.
- eclipse中生成的html存在中文乱码问题的解决方法
eclipse中生成的html存在中文乱码问题的解决方法 参考文章: (1)eclipse中生成的html存在中文乱码问题的解决方法 (2)https://www.cnblogs.com/bug-hu ...
- python处理json数据 乱码报错_python操作mysql中文显示乱码的解决方法
本文实例展示了一个脚本python用来转化表配置数据xml并生成相应的解析代码. 但是在中文编码上出现了乱码,现将解决方法分享出来供大家参考. 具体方法如下: 1. Python文件设置编码 utf- ...
- 【已解决】对JSP页面传值中文乱码的简单解决方法
很多java程序员在日常的工作中总会遇到对JSP页面传值中文乱码的情况,一些朋友由于操作不当,造成了很大的麻烦.本文将为大家讲解关于对JSP页面传值中文乱码的简单解决方法的内容. 方法/步骤 方法一: ...
最新文章
- Swift - AppDelegate.swift类中默认方法的介绍
- angularJs在线API文档
- 从VMware ESX Server 4升级到ESXi 5
- 怎样利用超图客户端打点_渗透测试——XSS利用工具BeEF攻击演示
- boost--线程同步
- JSP作用域与特殊对象
- request对象简介和获取客户机信息
- Java实现Facebook第三方登录
- 大数据预测实战-随机森林预测实战(三)-数据量对结果影响分析
- Python:Python全球生态主站,pip安装方法、集成安装方法、文件安装方法、第三方库自动安装脚本
- 进程的创建fork vs vfork
- java中isprime_Java中的Arcane isPrime方法
- BN层的running_mean更新机制
- Jetpack-Compose
- 华为 M5680t对HGU ONU配置指导
- 22岁少年破解史上最严重网络攻击,拯救全球互联网,三个月后却被FBI逮捕……
- 如何用LambdaWrapper去实现去重查询
- teamview 解除限制使用时间方法(判断长时间使用 会限制使用时间)
- 联想小新air13pro重装系统_联想小新Air 13怎么装win10系统|联想小新Air 13用u盘重装win10系统教程-系统城...
- Windows下QT设置应用程序(exe)图标、任务栏托盘图标、任务栏窗口图标