php 有哪些编码问题,php编码问题

回复讨论(解决方案)

echo mb_strlen("星",'gbk');

1

echo strlen("星")输出的是3

表示你的程序文件保存成了 utf-8 编码的了

在strlen计算时,对待一个UTF8的中文字符是3个长度

这是固定值,不必理会为什么.

因为我也不知道.

在utf-8编码下,一个汉字占3个字节,所以返回3.

这个函数和编码有非常大的关系,需要选用正确的编码才能得出正确的数值

学习了 编码要统一啊

utf-8下,中文是3个字符

3 UTF-8

UTF8是中文是三?字符的

echo strlen("星");

我的不管是 utf-8 还是 gbk都是输出3

重装后两个都是输出 2

我彻底凌乱了

echo mb_strlen("星",'gbk');

1

为什么

echo mb_strlen("星",'gbk'); 输出是1

echo mb_strlen("星",‘utf-8’); 我输出的是1

输出是2 EUC-CN

echo strlen("星");

怎样在utf-8下输出3

在gbk下输出2

将你的文件保存为utf-8编码就是在utf-8下。保存为ANSI格式就是gbk下。

echo strlen("星");

我的不管是 utf-8 还是 gbk都是输出3

重装后两个都是输出 2

我彻底凌乱了

不是这个编码,而是你的php文件保存时的编码。

UTF8 中文是3个字符

GBK 中文是2个字符

请问你这个软件叫什么名字,我也想下载

我之前那些代码都是用Visual Studio 2013 写的,再把后缀名改为php,经常出现一些奇怪的问题

最后一个小疑问

echo mb_strlen("星",'gbk');

utf-8 下 输出 2

ansi 下 输出 1

echo mb_strlen("星",'utf-8');

utf-8 下 输出 1

ansi 下 输出 1

这个是怎么一回事??

不是这个编码,而是你的php文件保存时的编码。

UTF8 中文是3个字符

GBK 中文是2个字符

不可以转码吗?

不可以!

只是通知浏览器用 charset 指定的字符集解释内容

如果你的程序文件是 utf-8 的,那么声明 charset=gbk 只会导致乱码

而没有 反而会因浏览器的自动识别功能,不出现乱码

设置文件的编码和声明charset是不同的,如果需要设置文件编码,一般的软件就可以解决,如notepad++

echo mb_strlen("星",'gbk');

utf-8 下 输出 2

ansi 下 输出 1

echo mb_strlen("星",'utf-8');

utf-8 下 输出 1

ansi 下 输出 1

这个是怎么一回事??

请问你这个软件叫什么名字,我也想下载

我之前那些代码都是用Visual Studio 2013 写的,再把后缀名改为php,经常出现一些奇怪的问题

editplus

?於mb_strlen 可以看看?? http://developer.51cto.com/art/201105/263103.htm

可以这样理解。

echo mb_strlen("星",'gbk');

utf-8 下 输出 2 // 一个中文在utf-8下占三个字节,在gbk下占两个字节, 以gbk算的话,就是3/2 = 1.5个字符,半个字符也算一个,所以输出2

ansi 下 输出 1

echo mb_strlen("星",'utf-8');

utf-8 下 输出 1

ansi 下 输出 1 // 这里就是2/3 小于1,也是按1算。

所以用mb_strlen 检测字符串包含的字符数时,编码统一就不会有问题了。

谢谢大家,我懂了

echo mb_strlen("星",'gbk');

utf-8 下 输出 2

ansi 下 输出 1

echo mb_strlen("星",'utf-8');

utf-8 下 输出 1

ansi 下 输出 1

这个是怎么一回事??

不同的环境中出现了不同的结果,这是因为你错误的使用了参数造成的!

mb 系列函数的 encoding 参数用于指明被操作的字符串的字符集,给错了自然结果也就错了

所以在使用时应用 mb_detect_encoding 或 mb_check_encoding 函数取得字符串实际的字符集

$s = '星';$charset = mb_detect_encoding($s, 'utf-8, gbk');echo mb_strlen($s, $charset); $charset = mb_check_encoding($s, 'utf-8') ? 'utf-8' : 'gbk';echo mb_strlen($s, $charset);

由于 mb_detect_encoding 容易出现误判,所以新增了比较准确的 mb_check_encoding 函数

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值