記事カテゴリ:
背景:HTMLソースの文字コード:gb2312(中国語)より部分的に日本語コンテンツもあります
問題点:PHPでgb2312文字コードのソースをDOMDocumentで扱うときに日本語が正しく表示されていない
- PHPのDOMDocumentでgb2312のhtmlソースを読み込んで、出力すると、一部分の日本語が欠けていて、正しく表示されませんでした。
$doc = new DOMDocument(); $doc->loadHTML([gb2312のHTMLソース]); // HTMLソースの読み込む echo $doc->saveHTML(); // 日本語文字列に一部分が欠けて、正しく表示されていないことがある
- 一部分の日本語文字が表示されない
- 文字化け現象は見られないです
- PHPのバージョン:5.6
原因:PHPのマルチバイト文字列(mbstring)がgb2312をサポートしていないです
- PHPのマルチバイト文字サポート一覧を調べてみたら、gb2312が入っていません
- PHPの中国語文字をサポートしている文字コードは:GB18030(PHP5.4以降)
- GB18030はGB2312から拡張された文字コードです(拡張された文字コードはGBKもあります)
解決:GB2312のソースをGBK/GB18030に変換しします
- GB2312のHTMLソースを直接にGBK/GB18030に変換します
$str = preg_replace('/gb2312/', 'GB18030', [gb2312のHTMLソード]); // ヘッダーのcharsetをGB18030への変換 $str = mb_convert_encoding( $str, 'GB18030' ); // HTMLソースをGB18030に変換 $doc = new DOMDocument(); $doc->loadHTML( $str ); echo $doc->saveHTML(); // 正常に日本語が表示され
- 変換後のソースに扱った日本語が正しく表示されます
コメントを追加