メインコンテンツに移動

メインナビゲーション

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

パンくず

  • ホーム
  • PHPのDOMDocumentがHTMLロード後に文字化けの対応

PHPのDOMDocumentがHTMLロード後に文字化けの対応

php
development

問題点:PHPのDOMDocumentが日本語文字列をロード後に文字化けが発生しました

  • 環境:PHP5.6、default_charset:utf-8
  • DOMDocumentのloadHTMLメッソードで日本語文字列を読み込め、saveHTMLで読み込んだ文字列が文字化けになっていることが分かりました
    $doc = new DOMDocument();
    @$doc->loadHTML( $result );  // $resultが日本語文字列
    echo $doc->saveHTML();  // 文字化けの文字列が表示され

    PHPのDOMDocumentが日本語文字列読み込んでから文字化けになる

原因:不明(おそらくphpの設定)

  • 同じコードでLinuxとWindows環境でテストしてみたが、Windows環境は問題はありませんでした
  • LinuxとWindowsのphpバージョン、mb_stringの設定は同じです
  • なぜLinux上で文字化け発生したかは不明です

解決:DOMDocumentが日本語を読み込む時に文字コードを指定します

  • DOMDocumentが生成した時に文字コード指定したが、失敗しました(依然文字化け)
    @$doc->loadHTML('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">' . $result);

結論:DOMDocumentがHTMLソースを読み込む時に文字コード指定があれば安全です

  • 今回の文字化け例は文字列(HTMLソース)にHTMLのhead部分がありませんでした(charset=utf-8の設定が欠けている)
  • DOMDocumentが文字列を読み込む時に、HTMLのcharsetより文字コードを扱っているようです
ホーム

古松

検索

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)