ホームページ  >  記事  >  バックエンド開発  >  PHPエンコードの問題

PHPエンコードの問題

WBOY
WBOYオリジナル
2016-06-23 13:47:44814ブラウズ

8b05045a5be5764f313ed5b9168a17e6
93f0f5c25f18dab9d176bd4f6de5d30e
9c3bca370b5104690d9ef395f2c5f8d1 ;body>
86df25a039d020c9633937d93bcff2da

echo strlen("star") 。 ) ; 出力は 1 です

echo mb_strlen("star",'utf-8'); 出力は 1 です

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

出力は 2 EUC-CN です

echo strlen("star");

utf-8 で 3 を出力する方法

gbk で 2 を出力する


ファイルを utf-8 で utf-8 エンコードとして保存します。 ANSI 形式で gbk の下に保存します。

3a975e20c7948da0aedb370dcf5932a4

echo strlen("star");


私の場合は utf-8 であっても gbk であっても出力 3 です

再インストール後、どちらも 2 を出力します
完全に混乱しています

3a975e20c7948da0aedb370dcf5932a4 エンコーディングではなく、php を保存するときのエンコーディングですファイル。
UTF8 中国語は 3 文字
GBK 中国語は 2 文字

3a975e20c7948da0aedb370dcf5932a4



質問させてくださいこのソフトウェアの名前は何ですか? 私もダウンロードしたいです
以前のコードはすべて Visual Studio 2013 で書かれていたのですが、サフィックス名を php に変更すると、奇妙な問題が頻繁に発生しました

最後の小さな質問です

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

utf-8 次の出力 2

ansi 次の出力 1

echo mb_strlen("star",'utf-8');
utf-8 次の出力 1
ansi 次の出力1

これどうなってるの? ?


これはこのエンコーディングではなく、php ファイルを保存するときに使用されるエンコーディングです。
UTF8 中国語は 3 文字
GBK 中国語は 2 文字
3a975e20c7948da0aedb370dcf5932a4 トランスコードできないのですか?

不可以!
e6f50788e4d11d41f37c7f7fc8a5273e
只是通知浏览器用 charset 指定的字符集解释内容
如果你的程序文件是 utf-8 的,那么声明 charset=gbk 只会导致乱码
而没有 e6f50788e4d11d41f37c7f7fc8a5273e 反而会因浏览器的自动识别功能,不出现乱码

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

echo mb_strlen("星",'gbk');
utf-8 下  输出  2
ansi 下  输出 1

echo mb_strlen("星",'utf-8');
utf-8 下  输出  1
ansi 下  输出 1

这个是怎么一回事??


e6f50788e4d11d41f37c7f7fc8a5273e



请问你这个软件叫什么名字,我也想下载
我之前那些代码都是用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 函数
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。