プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。
phpを猛学中ですが、なかなかわかりません。
特に正規表現は難解です。
大文字小文字を区別しないで文字列を置換したり、その位置を求めたいのです。
PHP5なら、文字列$htmlの中の</BODY></body></Body>などをを</div>に変換
$html = str_ireplace('</body>','</div>', $html);
また、文字列の位置を求める
$pos0 = stripos($html, "</body>");
と、いうことで簡単だったのですが、
いざ、サーバへアップしてみるとなんと、そのサーバは、PHP4でした。
それで、動作しなくなってしまいました。
同じことをPHP4で処理するにはどのようにしたらよいのでしょうか。
QNo.4013255などを参考に考えたのですが、どうもだめです。
よろしくお願いします。

A 回答 (3件)

preg_replace()でやるといいでしょう



<?
$html="</BODY></body></Body>";
print htmlspecialchars($html);
$html = preg_replace('/<\/body>/i','</div>', $html);
print htmlspecialchars($html);
?>

この回答への補足

yambejpさん、レスありがとうございます。
大文字小文字区別なしに変換できました。
しかし、文字列の位置を求めることはできません。
$html中の<bodyまでを削除するのに、
PHP5なら
$pos0 = stripos($html, "<body");
$html = substr($html,$pos0);
で、可能ですが、
php4ですと、striposが使えません。
これに変わる関数を探すのですが、見つけることができません。

補足日時:2008/05/13 15:51
    • good
    • 0

>しかし、文字列の位置を求めることはできません。



位置を求める方はlowercaseにしたものを対象に小文字で位置を求めればいいのでは?

  $pos0 = strpos(strtolower($html), "<body");
  $html = substr($html,$pos0);
    • good
    • 0
この回答へのお礼

shimixさん、お早うございます。
できました。
$html自体全てを小文字に変換してから、位置を求めるかと思ったのですが、
$html自体、小文字に変換されていませんでした。
どうもありがとうございました。

お礼日時:2008/05/14 05:54

<?


$html="hogehogehoge</BODY>fugafugafuga";
if(preg_match('/(.*?)<\/body>/i', $html,$matches)) $pos0 = strlen($matches[1]);
print $pos0;
?>

で</body>までの文字列をマッチさせれば、その長さが、出現位置に
なりますね?

この回答への補足

yambejpさん、お早うございます。
ご丁寧にレスありがとうございます。
正規表現でできないものかと考えていたので、とてもありがたいレスでした。
しかし、どういうわけか、$pos0=0となってしまいます。
配列の番号など変えてみましたが、
strlen($matches[0]);だと、7
strlen($matches[1]);だと、0
strlen($matches[2]);だと、0
と、なってしまいます。

補足日時:2008/05/14 05:54
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!