ホームページ >バックエンド開発 >PHPチュートリアル >utf8からphpに変換する際の文字抜け・文字化けの解決策 gbk_PHPチュートリアル
PHP では、uft8 の文字列を gbk や gb2312 に変換すると、文字化けや欠損が発生することがあります。gbk のエンコード範囲と uft8 のエンコード範囲の問題があるため、以下に gbk と utf8 のエンコード範囲の表を簡単に示します。見てみれば、その理由がわかるでしょう。
1.コーディング範囲
1. GBK (GB2312/GB18030)
x00-xff GBK 2 バイトエンコード範囲
x20-x7f アスキー
xa1-xff 中国語
x80-xff 中国語
2. UTF-8 (ユニコード)
u4e00-u9fa5 (中国語)
x3130-x318F (韓国語
)
xAC00-xD7A3 (韓国語)
u0800-u4e00 (日本語)
追記: 韓国語は[u9fa5]より大きい文字です
例
コードは次のとおりです | コードをコピー |
$c = 'テスト•キャラクター転送•ハッピーメーデー! '; echo iconv('utf-8', 'gbk',$c); |
出力のみ: テストすると、すべてが失われます。」
解決策:
//無視を追加
コードは次のとおりです | コードをコピー |
$c = 'テスト•キャラクター転送•ハッピーメーデー! '; echo iconv('utf-8', 'gbk//IGNORE',$c); |
入力と出力: テスト文字転送 ハッピー メーデー!
例 2
コードは次のとおりです | コードをコピー |
echo $str= ‘こんにちは、ここでコーヒーを売っています!’;
エコー ' '; echo iconv('GB2312', 'UTF-8', $str); //文字列エンコーディングを GB2312 から UTF-8 に変換します エコー ' '; echo iconv_substr($str, 1, 1, 'UTF-8') // バイト数ではなく文字数で切り詰めます print_r(iconv_get_encoding()); // 現在のページのエンコーディング情報を取得します echo iconv_strlen($str, 'UTF-8'); // 設定されたエンコーディングの文字列長を取得します ?> |