头文件"inconv.h"。iconv命令可以将一种已知的字符集文件转换成另一种已知的字符集文件。
它的作用是在多种国际编码格式之间进行文本内码的转换。
作为编程接口的iconv包括3个函数:
iconv_open函数用于初始化用于转换的内部缓冲区,需要指明需要从何种编码方式转换到哪一种。
iconv函数进行实际的转换,需要给出两个间接缓冲区指针和剩余字节数指针。该函数需要更新所有相关信息,因此将不可改写的指针传递给iconv是错误的。
iconv_close函数释放iconv_open函数的缓冲区。
linux下使用方法
举例
例如:从GB2312转换为UTF-8。
用法:iconv
[选项...] [文件...]
Convert
encoding of given files from one encoding to another.
输入/输出格式规范:
-f,--from-code=NAME
始文本编码
-t,
--to-code=NAME 输出编码
信息:
-l,
--list 列举所有已知的字符集
输出控制:
-c
从输出中忽略无效的字符
-o,
--output=FILE 输出文件
-s,
--silent suppress warnings
--verbose
打印进度信息
-?,
--help 给出该系统求助列表
--usage
给出简要的用法信息
-V,
--version 打印程序版本号
Mandatory
or optional arguments to long options are also mandatory or
optional
for
any corresponding short options.
类似命令:
piconv , convmv
piconv是流模式的,处理超大文件比较方便.
convmv是给文件名重命名的,windows和linux系统间切换后尤其有用
unix下安装PHP的module,需要重新编译PHP,Windows下安装模板,只需将php.ini里的配置打开相应的dll就可,例如,需要加入gb库的支持,需要如下设置:
extension_dir
= “C:/ipaddr/php/extensions/”
(注意,建议写全地址,并且后面加上/,很多时候是因为这里设置不对,才导致无法加载其它模块的dll的)
再打开
extension=php_gd2.dll
但如果是安装iconv.dll,按上面方法,打开php_iconv.dll后,还是无法开启iconv模块,需要如下配置:
a.上iconv的官方下载站点
下面Windows版的iconv文件:libiconv-1.9.1.bin.woe32.zip
将这文件解压,将bin/下面的charset.dll,iconv.dll,iconv.exe拷贝到c:/windows/
(或其它的系统PATH中)
(ipaddr提醒你,这步是必须的,php_iconv.dll也是调用GNU的iconv库的,所以,先要安装GNU的iconv库)
b.开启php.ini里面的php_iconv.dll
c.重启Apache,再在phpinfo();检测是否开启iconv。
最近在做一个程序,需要用到iconv函数把抓取来过的utf-8编码的页面转成gb2312,
发现只有用iconv函数把抓取过来的数据一转码数据就会无缘无故的少一些。
让我郁闷了好一会儿,去网上一查资料才知道这是iconv函数的一个bug。iconv在转换字符”—”到gb2312时会出错
解决方法很简单,就是在需要转成的编码后加
“//IGNORE” 也就是iconv函数第二个参数后.如下:
以下为引用的内容:
iconv(“UTF-8″,”GB2312//IGNORE”,$data)
ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符串都无法被保存。
这个iconv()这个函数,在php5中是内置的.
列子
echo
$str= ‘你好,这里是卖咖啡!’;
echo
‘
’;
echo
iconv(‘GB2312′, ‘UTF-8′, $str); //将字符串的编码从GB2312转到UTF-8
echo
‘
’;
echo
iconv_substr($str, 1, 1, ‘UTF-8′); //按字符个数截取而非字节
print_r(iconv_get_encoding());
//得到当前页面编码信息
echo
iconv_strlen($str, ‘UTF-8′); //得到设定编码的字符串长度
//也有这样用的
$content
= iconv(“UTF-8″,”gbk//TRANSLIT”,$content);
?>
php下使用iconv需要注意的问题
在使用这个函数进行字符串编码转换时,需要注意,如果将utf-8转换为gb2312时,可能会出现字符串被截断的情况发生。
string
iconv( string $in_charset , string $out_charset , string $str )
在使用这个函数进行字符串编码转换时,需要注意,如果将utf-8转换为gb2312时,可能会出现字符串被截断的情况发生。
此时可以使用以下方法解决:
//author:zhxia
$str=iconv('utf-8',"gb2312//TRANSLIT",file_get_contents($filepath));
即在第二个参数出添加红色字部分,表示:如果在目标编码中找不到与源编码相匹配的字符,会选择相似的字符进行转换。
此处也可以使用://IGNORE
这个参数,表示忽略不能转换的字符。