php iconv_strlen,iconv详解

头文件"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

这个参数,表示忽略不能转换的字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值