PHPエンコードの問題

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-23 13:47:44
オリジナル
903 人が閲覧しました



;body>
echo strlen("star");
?> () 関数は文字列の長さを返します。
1 漢字 = 2 バイトではありませんか?
エンコーディングに関係していますか?




ディスカッションへの返信 (解決策)

echo mb_strlen("星",'gbk');
ログイン後にコピー
ログイン後にコピー


1
ログイン後にコピー

echo strlen("star") の出力は 3 です

はプログラム ファイルが utf-8 エンコーディングで保存されることを意味します


in strlen計算すると、UTF8 の漢字の長さは 3 です

これは固定値です。理由については心配しないでください

UTF-8 エンコードでは、1 つの漢字が 3 バイトを占めます。したがって 3 が返されます

この関数はエンコーディングと大きく関係しています

正しい値を取得するには、正しいエンコーディングを選択する必要があります

utf-8 では、中国語は 3 文字です。

<?php$str = '我';echo strlen($str).PHP_EOL;$encode = mb_detect_encoding($str, array("ASCII","UTF-8","GB2312","GBK","BIG5")); echo $encode;
ログイン後にコピー


3 UTF-8

UTF8 は 3 文字の中国語です

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 の下に保存します。

echo strlen("star");


私の場合は 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("star",'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 函数

関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート