• ベストアンサー

php4 大文字小文字の区別なし置換

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

  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

<? $html="hogehogehoge</BODY>fugafugafuga"; if(preg_match('/(.*?)<\/body>/i', $html,$matches)) $pos0 = strlen($matches[1]); print $pos0; ?> で</body>までの文字列をマッチさせれば、その長さが、出現位置に なりますね?

rqg2010
質問者

補足

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

その他の回答 (2)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

>しかし、文字列の位置を求めることはできません。 位置を求める方はlowercaseにしたものを対象に小文字で位置を求めればいいのでは?   $pos0 = strpos(strtolower($html), "<body");   $html = substr($html,$pos0);

rqg2010
質問者

お礼

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

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

preg_replace()でやるといいでしょう <? $html="</BODY></body></Body>"; print htmlspecialchars($html); $html = preg_replace('/<\/body>/i','</div>', $html); print htmlspecialchars($html); ?>

rqg2010
質問者

補足

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

関連するQ&A

  • PHPソースファイルの文字列置換をしてから、

    PHPソースファイルの文字列置換をしてから、 そのスクリプトを実行する方法を実行しようとしている のですが、うまくいきません。 似たような質問(http://oshiete.nikkeibp.co.jp/qa5496696.html) を参考にして、文字列置換自体はうまくいったのですが、 phpファイル実行時にまったく関係の無いはずの DBアクセスでエラーが発生してしまいました。 変換前前のphpファイルに置換後の文字列を手で入れて、 データベース実行するとうまくいきます。 しかしながら、phpファイルの文字列置換をstr_replaceで実行し、別名保存した後 includeしても、うまくいかないといった状況です。 ちなみに置換後のphpファイル内で $置換後文字列 = "test"; echo $置換前文字列; とすると、置換前文字列が置換後文字列に きちんと変わっているようで、 "test"と出力されます。 もしかすると、原因は違う所に潜んでいるのかもしれませんが、 どこを調べれば良いのか検討がつかず困っております。 どなたか解決手段の分かる方がいらっしゃれば教えて頂けませんでしょうか? -------------------------------------------------------------- 尚、ファイル構成は top |-change (1.php) |-database (2.php) |-search (検索画面[データベース検索の入り口。form action ="./3.php"],3.php) |-base (4.php,5.php[tempファイル]) となっており、 それぞれの中身は 1.文字列置換実行用のphpファイル(1.php):  1-1.file_get_contentsで4のphpファイルを取得  1-2.str_replaceを用いて文字列置換  1-3.文字列置換したファイルをfwriteで4.phpと同じディレクトリに保存(5.php)  1-4.5.phpをincludeする。  1-5.5.phpをunlinkする。 2.データベースアクセス(mysql)用関数を含むphpファイル(2.php):  ↓エラーの原因と思われる関数  function connect() { global $host,$user_id,$passwd,$con; $con = mysql_connect($host,$user_id,$passwd); } 置換前phpファイルを手動で文字列置換した場合には  同ファイル内で設定したglobal変数の値がきちんと格納されており、  データベース実行がうまくいきます。  置換後phpファイルでは$host等に値が格納されていないため、  データベース実行がうまくいきません。  グローバル変数の中身は同ファイル内で定義しています。 3.検索を実行した時に呼び出されるphpファイル(3.php):  3-1.include("../change/1.php"); 3-2.1.phpの関数の実行 4.文字列置換前のphpファイル(4.php): /*呼び出し元のディレクトリ位置でないとincludeに失敗する*/ 4-1.include("../database/2.php");  4-2.2.phpのデータベースアクセス関数を実行する。 5.文字列置換後のphpファイル(5.php): 3-2の1.php関数の実行により、一時的に生成される。

    • ベストアンサー
    • PHP
  • PHPでHTMLファイル置換 プログラムについて

    以下のプログラムを書きました。 あるHTMLファイルをテンプレートとし、 中に記述している置換文字列を動的に 表示させるというものです。 しかしなかなか表示されません。 どこがおかしいのでしょうか? --template.html-- <html><head><title>test</title></head> <body> 表題 他いろいろ <!-- data replace --> フッター いろいろ </body></html> --index.php-- $page_lines = File("template.html"); $all_lines=''; foreach( $page_lines as $line ){  $all_lines .= $line; } $str = "<div>出力用データいろいろ</div>"; print preg_replace(/<!-- data replace -->/,$str, $all_lines); 以上です。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 文字列のアスタリスク置換

    PHP4でDBはMySQLを使用しています。 DBから取り出したいろいろな長さの文字列を*に置換したいのですがどのようにしたら良いでしょうか。 str_replaceを用いて置換をしようとしていますが文字列長が一定でないため難しいです。 宜しくお願い致します

    • ベストアンサー
    • PHP
  • PHPの置換方法

    <?php $begin = 'あいうえおかきくけこさしすせそ'; $replace = 'か*'; $last = ''; $word = str_replace($replace, $last, $begin); php> 以上のようにプログラムを組んで$wordの出力を『あいうえお』のように『か』以降をすべて空白で置換というプログラムを作りたかったんですがうまくいきませんでした。指定した文字列以降を全部置換するには*は使えないんでしょうか?また、ほかに方法があればアドバイスをいただけるとうれしいです。

    • ベストアンサー
    • PHP
  • 文字列置換

    PHPでの文字列置換についての質問です。 文字列を受け取った時には [09/06/04 21:01:05] といった値で受け取ります。これを [6月4日 21時1分] といった値で返そうと考えています。 str_replace、explodeでの方法も考えましたがあまりににくどい処理になるため、断念しました。 なにか他に手はないものでしょうか?? よろしければ回答お願いします。

    • 締切済み
    • PHP
  • PHPでの文字列置換について

    こんにちは PHPにて丸カッコ内の文字列を取得しようとしています。 対象の文字列は、「坂(さか)」という文字列の全角丸カッコ「()」内になります。 正規表現でやればすぐに取得できるのかもしれませんが、正規表現の知識が無いため 力ずくでやってみようとしました。 そこで、「(」で文字列の位置を取得して…と考えて色々やったのですが、 この全角丸カッコ「(」が、mb_strposでも位置を検知できず、 全角丸カッコ「(」を半角にして対応してみようかとmb_ereg_replace('(','(','坂倉武史(さかくらたけし)');としようとしても、変換されず困っております。 ちなみに「坂(さか)」という文字列は、 ネット上のあるHTMLから、file_get_contentsでURLを指定してから 取得して、その文字コードがEUC-JPなので、 mb_convert_encoding($dataXML, "UTF-8", "EUC-JP"); で、UTF-8に変更しております。 文字コードの問題のかもしれませんが、答えがみつかりません。 1。正規表現で取得できるのであれば、正規表現の書き方をお教えいただけますでしょうか。 2。正規表現が難しいのであれば、力ずくでやるのでこの「(」全角丸カッコの始まりの検知方法をお教えいただけますでしょうか。 PHPの実行環境は、 PHP5.3 mbstring.language  japanese mbstring.internal_encoding  UTF-8 mbstring.encoding_translation  ON default_charset  UTF-8 UNIX 文字コード UTF-8 ソース文字コード UTF-8 です どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Javascriptで特殊文字を置換する方法

    表題の件で分からず教えてください。 PerlでHTMLとJavascript(HTML埋め込み)を作成しています。 Javascript(On Click)で、文字列を置換させたいのですが、うまくできません。 (最終的にやりたいことはTextAreaに埋め込んだタグ付き文章を「プレビューする」ようなイメージです) ■置換前の文字列 $body$ ■置換後の文字列 任意の文字列(タグを含む) ネットで調べたところ次の方法でできるようだったので試しましたが、できませんでした。 var rgexp = new RegExp("\$body\$", "g"); str = frm.preview.value.replace(rgexp, "■■■"); 「$」とエスケープ文字をはずすとうまくいくので、多分「$」で失敗しているのだと思いますが 解決が分かりません。 ※エスケープをはずすとPerlの出力時に怒られてしまいます お分かりになる方いらっしゃいましたらお願いします。

  • php 文字置換について

    php 文字置換について 以下のような文字列で、「記号、小文字、ハイフン」が連続する場合の「小文字、ハイフン」を削除したいです。 実装方法をご教示いただけないでしょうか。 aa-a-b 以下のように実装した所、aa-のa-も削除されてしまいます。削除したいのは-a-のa-のみです。 if (preg_match_all("/[,'\-\(\)\[\]\.:\+\/][a-z]+-/", $d, $hit)) { ____foreach ($hit as $h) { ________$l = count($h); ________for ($k=0; $k<$l; $k++) { ____________$p = substr($h[$k], 1); ____________$d = str_replace($p, "", $d); ________} ____} }

    • ベストアンサー
    • PHP
  • PHP:2つの置換文字列を一気に変換するには

    PHPで1つの文字列変数内に2つの置換文字列が存在する場合一気に変更可能でしょうか? $data = "a%CHANGE1%c%CHANGE2%"; 置換文字列1:%CHANGE1% ⇒ "b"に変換 置換文字列2:%CHANGE2% ⇒ "d"に変換 ↓すると print($data); 「abcd」 となる感じです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPの置換方法

    PHPで文字列の置換をしたいです。 BRタグをエンエヌエンアールの改行文字コードに置き換えたいです。教えてください

    • ベストアンサー
    • PHP

専門家に質問してみよう