php iconv_strlen,iconv详解

php iconv_strlen,iconv详解头文件 inconv h iconv 命令可以将一种已知的字符集文件转换成另一种已知的字符集文件 它的作用是在多种国际编码格式之间进行文本内码的转换 作为编程接口的 iconv 包括 3 个函数 iconv open 函数用于初始化用于转换的内部缓冲区 需要指明需要从何种编码方式转换到哪一种 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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220729.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午7:47
下一篇 2026年3月17日 下午7:48


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号