PHPを使用してHTMLドキュメントのボディテキストを抽出する
-
29-10-2019 - |
質問
この目的のためにDOMを使用する方が良いことはわかっていますが、このようにテキストを抽出してみましょう。
<?php
$html=<<<EOD
<html>
<head>
</head>
<body>
<p>Some text</p>
</body>
</html>
EOD;
preg_match('/<body.*?>/', $html, $matches, PREG_OFFSET_CAPTURE);
if (empty($matches))
exit;
$matched_body_start_tag = $matches[0][0];
$index_of_body_start_tag = $matches[0][1];
$index_of_body_end_tag = strpos($html, '</body>');
$body = substr(
$html,
$index_of_body_start_tag + strlen($matched_body_start_tag),
$index_of_body_end_tag - $index_of_body_start_tag + strlen($matched_body_start_tag)
);
echo $body;
結果はここで見ることができます: http://ideone.com/vh2fz
ご覧のとおり、私は予想以上に多くのテキストを受け取っています。
正しい長さを得るために、私が理解していないものがあります substr($string, $start, $length)
関数、私は使用しています:
$index_of_body_end_tag - $index_of_body_start_tag + strlen($matched_body_start_tag)
この式に何も悪いことはありません。
誰かが問題がどこにあるかを親切に提案できますか?
皆さんに感謝します。
編集:
みなさん、ありがとうございました。私の脳にはバグだけがあります。あなたの答えを読んだ後、私は今、問題が何であるかを理解しました、それは次のとおりです。
$index_of_body_end_tag - ($index_of_body_start_tag + strlen($matched_body_start_tag));
または:
$index_of_body_end_tag - $index_of_body_start_tag - strlen($matched_body_start_tag);
正しい解決策はありません
所属していません StackOverflow