phpを利用してのhtmlタグ除去の質問です。


例:
----------------------------
<html>
<body>
<body> <---不要

内容

</body> <--- 不要
</body>
</html>
----------------------------

置換後

----------------------------
<html>
<body>

内容

</body>
</html>
----------------------------


上記のようなhtmlがあった場合、
内側の不要な <body> </body> だけを削除したいのですが、
preg_replace などの関数を使ってどのような条件を書けば不要なbodyタグだけを削除することができるでしょうか?

困っています。
よろしくお願いいたします。

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2015/08/14 12:07:02
  • 終了:2015/08/14 13:29:02

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4502ベストアンサー獲得回数18692015/08/14 12:57:34

ポイント100pt

こんな感じでしょうか。

<?php
$html = ...

if (preg_match('/(.*?<body>)(.*)(<\/body>.*)/si', $html, $matches)) {
    $prefix = $matches[1];
    $body = $matches[2];
    $suffix = $matches[3];
    $new_body = preg_replace('/<\/?body>\s*/i', '', $body);

    $html = $prefix . $new_body . $suffix;
}

var_dump($html);

質問で書かれている内容以外に、以下のようなことを前提にしています。

  • body は複数個入る可能性がある
  • body には、class などの属性がつかない
  • 大文字で書かれている可能性もある
  • 改行コードがよく分からないので、BODY の後に続く空白文字(改行も含む)ごとタグを削除する


idoone.com で試してみたのがこちらです。
http://ideone.com/mafqXB

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません