作成日:2019-01-10, 更新日:2020-10-26
HTMLをマルっとパース
HTMLをマルっとパース。個人的にはあまり使わないので未調査
$source = file_get_contents(〇〇〇); // 文字コードの指定が正しいのに、文字化けを起こす→対応:libxml_use_internal_errors()、libxml_clear_errors() $domDocument = new DOMDocument(); libxml_use_internal_errors(true); $domDocument->loadHTML($source); libxml_clear_errors(); $xmlString = $domDocument->saveXML(); // XMLをパース $xmlObject = simplexml_load_string($xmlString); // 連想配列化 $aryDom = json_decode(json_encode($xmlObject), true);
HTMLタグをパース
・タグを単体でパースしようとすると文字化けを起こす→utf8の指定を追記
・タグ単体だと「head」や「body」で囲まれて、あとで取り出すのが面倒→無理やり「body」内の「xxx」に放り込む形でいく
function tagParse($tag='') {
// 文字化け対策+後で抜き出すように調整
$utf8 = '<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head>';
$tmpTag = $utf8 . '<body><xxx>' . $tag . '</xxx></body>';
// HTMLをXMLとして適切に整形
$domDocument = new DOMDocument();
libxml_use_internal_errors( true );
$domDocument->loadHTML($tmpTag);
libxml_clear_errors();
$xmlString = $domDocument->saveXML();
// XMLをパース
$xmlObject = simplexml_load_string($xmlString);
// 連想配列化
$aryDom = json_decode(json_encode($xmlObject), true);
if ( is_array($aryDom) && isset($aryDom['body']) && isset($aryDom['body']['xxx']) ) {
return $aryDom['body']['xxx'];
}
else {
return $aryDom;
}
}