メインコンテンツに移動
ホーム

古松

メインナビゲーション

  • ホーム
  • ビデオ
  • ご連絡

パンくず

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

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

問題点: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より文字コードを扱っているようです

検索フォーム

カテゴリ別

  • laravel
  • drupal
  • javascript
  • windows
  • html
  • mysql
  • php
  • apache
  • css
  • SEO
  • video
  • wordpress
  • linux
  • python
  • Electron
  • Visual Studio Code

google ads