メインコンテンツに移動

メインナビゲーション

  • ホーム
  • サイトマップ
  • ビデオ
  • ご連絡

パンくず

  • ホーム
  • HTMLの文字コードがGB2312(中国語)より部分的に日本語コンテンツのPHPで扱う問題点と解決方法

HTMLの文字コードがGB2312(中国語)より部分的に日本語コンテンツのPHPで扱う問題点と解決方法

html
html
php

背景:HTMLソースの文字コード:gb2312(中国語)より部分的に日本語コンテンツもあります

  • 文字コード:gb2312が中国の簡体漢字
  • HTMLソースの文字コード:gb2312であり、正常日本語のコンテンツを扱ることができます
    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();   // 正常に日本語が表示され
  • 変換後のソースに扱った日本語が正しく表示されます
ホーム

古松

検索

Article Category

  • apache(7)
  • css(19)
  • drupal(295)
  • Electron(4)
  • html(34)
  • javascript(27)
  • laravel(4)
  • linux(5)
  • macOS(2)
  • mysql(13)
  • php(19)
  • python(4)
  • SEO(12)
  • video(72)
  • Visual Studio Code(4)
  • windows(13)
  • wordpress(32)