• ベストアンサー
  • すぐに回答を!

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); 以上です。 よろしくお願いいたします。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数268
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.1
  • awazak
  • ベストアンサー率36% (61/165)

print preg_replace(/<!-- data replace -->/,$str, $all_lines); ↓ print str_replace('<!-- data replace -->',$str, $all_lines); でどうですか? このような置換には、pregを使わなくていいと思います。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 正規表現で指定範囲すべて除去する方法

    正規表現で {○○○○}の中を全て除去する場合 echo preg_replace('/{.*?}/', '', $html); で{ 文字は除去できる }の中が全て文字だけの場合は除去できるのですが、 { <div>タグを含むと除去できないので困っています</div> }とすると echoした場合に{ <div>タグを含むと文字も除去できな、すべて表示</div> }はそれごとすべてHTML表示されます。 { }内の{}やタグ、文字を全て除去する正規表現はどうすればよいのでしょうか? --------------------------------------------------- $html= <<<_EOD_ <HTML> <HEAD> <title>ここにページタイトルを記述する</title> </HEAD> <BODY> <p>ここの文章は表示する</p> { <div>ここにエリアは表示しない</div> } </BODY> </HTML> _EOD_; echo preg_replace('/{.*?}/', '', $html); -------------------------------------------------------------

    • 締切済み
    • PHP
  • PHPで作る掲示板のプログラムについて

    これを実行するとページは表示されるのですが、名前や題名、本文に日本語を入力すると 例えば名前に「山田」と入れ送信すると投稿者のところに何も出ません どうすれば解決できますか? <?php $lines = file('bbs2.txt'); if ($_POST['write']) { $items = explode("\t", $lines[0]); $no = $items[0] + 1; $name = htmlspecialchars($_POST['name']); if (!$name) $name = "名無しさん"; $mail = htmlspecialchars($_POST['mail']); $title = htmlspecialchars($_POST['title']); if (!$title) $title = "無題"; $contents = htmlspecialchars($_POST['contents']); $contents = str_replace("\r\n", "<br>", $contents); $contents = str_replace("\r", "<br>", $contents); $contents = str_replace("\n", "<br>", $contents); $delkey = htmlspecialchars($_POST['delkey']); $time = date("Y/m/d H:i:s"); $expire = time() + 3600 * 24 * 30; setcookie("name", $name, $expire); setcookie("mail", $mail, $expire); setcookie("delkey", $delkey, $expire); $data = "$no\t$name\t$mail\t$title\t$contents\t$delkey\t$time\n"; array_unshift($lines, $data); } else { $name = $_COOKIE['name']; $mail = $_COOKIE['mail']; $delkey = $_COOKIE['delkey']; } if ($_POST['delete']) { for ($i = 0; $i < count($lines); $i++) { $items = explode("\t", $lines[$i]); if ($items[0] == $_POST['delno'] && $items[5] == $_POST['delkey2']) { array_splice($lines, $i, 1); } } } if ($_POST['write'] || $_POST['delete']) { $fp = fopen('bbs2.txt', 'w'); foreach($lines as $line) fputs($fp, $line); fclose($fp); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>掲示板2</title> </head> <body> <form method="post" action="bbs2.php"> お名前:<input type="text" name="name" value="<?php print $name ?>"><br> メール:<input type="text" name="mail" value="<?php print $mail ?>"><br> 題 名:<input type="text" name="title"><br> 削除キー:<input type="password" name="delkey" value="<?php print $delkey ?>"><br> <textarea name="contents" cols="60" rows="5"></textarea><br> <input type="submit" name="write" value="送信"> <hr> 記事番号:<input type="text" name="delno">  削除キー: <input type="password" name="delkey2">  <input type="submit" name="delete" value="記事削除"> </form> <hr> <?php foreach($lines as $line) { $line = rtrim($line); $items = explode("\t", $line); print "No.{$items[0]} "; print "<b>{$items[3]}</b> 投稿者:"; if ($items[2]) print "<a href='mailto:{$items[2]}'>"; print $items[1]; if ($items[2]) print "</a>"; print " 投稿時間:{$items[6]}"; print "<p>{$items[4]}</p><hr>\n"; } ?> </body> </html>

    • 締切済み
    • PHP
  • PHPでheader情報がうまく表示できない

    ドコモ対応でXHTMLのヘッダー情報がうまく送れません。 PCからのテストで header('Content-Type: application/xhtml+xml'); をコード挿入すし、サイト表示の確認すると「ファイルのダウンロード 」ダイアログがでます。 header('Content-Type: application/xhtml+xml'); を入れずにテストするとダイアログはでません。 ・display.phpがメインページであくまでもskin.htmlをインクルードして置換しecho表示する感じなのですが・・・・・ 困っています。助けて下さい。 skin.html ----------------- <html> <body> <head> <!--%title--> </head> <body> コンテンツ </body> </html> ----------------- test.php -------------------------------------------------------------------------------------- 変数定義は省略 $html = file_get_contents($temp); $agent = $_SERVER['HTTP_USER_AGENT']; if(preg_match("/^DoCoMo/i", $agent)){ $html = str_replace( "<!--%title-->", $docomo, $html); header('Content-Type: application/xhtml+xml'); echo "$html"; } elseif(preg_match("/^(J\-PHONE|Vodafone|MOT\-[CV]|SoftBank)/i", $agent)){ $html = str_replace( "<!--%title-->", $softbank, $html); header('Content-Type: application/xhtml+xml'); echo "$html"; } elseif(preg_match("/^KDDI\-/i", $agent) || preg_match("/UP\.Browser/i", $agent)){ $html = str_replace( "<!--%title-->", $au, $html); header('Content-Type: application/xhtml+xml'); echo "$html"; } else{ $html = str_replace( "<!--%title-->", $other, $html); header('Content-Type: application/xhtml+xml'); echo preg_replace('/{.*?}/', '', $html); -------------------------------------------------------------------------------------- display.php ------------------------------------------ <?php $temp = "./skin.html"; require_once('./test.php'); ?>

    • ベストアンサー
    • PHP

その他の回答 (1)

  • 回答No.2
  • inu2
  • ベストアンサー率33% (1229/3720)

差し替え部分が固定的に決まっているのであれば、preg_replaceじゃなくて、preg_replace使うほうが良いでしょう しかし、コメントタグを差し替えとして使うと、思わぬ誤作動というか、本来はコメントタグで出力させたい場合に対応できなくなりますので、私が使う方法としては 例えば <title>%TITLE%</title> などのように差し替え部分を % で囲っておいて、 %TITLE% 部分をreplaceさせる方法です webの構造にもよりますが、静的なHTMLを生成して保存させておく事も出来ますので、データを頻繁に更新しないページなどはそこそこ、速度が上がります あ、でも、テンプレートを使って静的HTMLを保存させるのであれば、保存先のディレクトリのパーミッションを777とかにする必要ありますけどね

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • preg_replace() で特定の文字の後から処理させたい

    preg_replace()でhtmlデータが入っている変数を扱っているのですが、ヘッダーを無視して<body>からその作業を開始させるということは可能でしょうか? $data = stristr($data, </head>); $data = preg_replace($pattern, $change, $data); としてしまうとヘッダーを削除してしまいます。 何か良い方法をご存知の方おられましたらどうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPのプログラムについて

    フォームから入力した文字列内に、半角スペース(' ')がいくつ含まれるかを表示させる "This is a pen." ⇒ 3個あります 文字列変数 $str に対して 文字列の長さを得る関数: strlen($str) N番目の文字を得る関数: substr($str,N,1) ※ 先頭文字は0番目 先頭から最後尾まで文字を繰り返し取って,空白文字ならカウントを増やす PHPの部分がまだできていない↓ <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>countBlank.php</title> </head> <body> <h1>空白文字をカウント</h1> <form action="countBlank.php" method="get"> <input type="text" name="str" size=50> <input type="submit" value="送信"> </form> <hr> <?php $space=0; echo("半角スペースは".$space."個あります。"); ?> </body> </html>

  • PHPでのページ表示について

    はじめまして。大変困ってます・・ PHP初心者なのですが、どなたか教えていただけないでしょうか・・ よくホームページで見かける 1|2|3 ↑このようなページ表示の数字の部分を画像にしたいのですが、どうしたらよいのでしょうか? CGI'Sというサイトから、フリーのショッピングカートをダウンロードして作っているのですが、全くの初心者のため、どうしたらいいのか全く分かりません・・ 多分ここをいじればいいのかな?と思うのですが・・ if($para) { $para = preg_replace('/&amp;p=[0-9]*?/','',$para); $para = preg_replace('/&p=[0-9]*?/','',$para); } $prefix = '?'; if(strpos($_this,'?')) { $prefix = '&amp;'; } $p_html = ''; $all_p = ceil($data_c / $max_row); if($all_p < $max_page){ $p_start = 0; $p_end = $all_p - 1; } else{ if(($p + 1) <= ceil($max_page / 2)){ $p_start = 0; $p_end = $max_page - 1; } else{ $p_start = ($p + 1) - ceil($max_page / 2); $p_end = $p_start + $max_page - 1; if($p_end >= $all_p - 1){ $p_end = $all_p - 1; $p_start = ($all_p - $max_page) ; } } if($p_end < ($all_p - 1)){ $tail = '...'; } } 本当に初心者で申し訳ないです。よろしくお願いします。

    • ベストアンサー
    • PHP
  • このタグで文字の大きさを変えたいのですが、、、、

    <head> <title>文字色をリアルタイムに変える</title> <script Language="JavaScript"><!-- count = 0; function changeColor(str) { txt = document.all["strID"].innerText; c = str.charAt(count); txt = txt.fontcolor("#"+c+c+"0000"); document.all["strID"].innerHTML = txt; count++; if (count > str.length) count = 0; setTimeout("changeColor('"+str+"')",100); } // --></script> </head> <body onLoad="changeColor('0123456789abcdefedcba987654321')"> <div id="strID" style="font-weight:900">ここの文字の色が変わるよ~ん</div> </body>

    • ベストアンサー
    • HTML
  • PHPで作る掲示板について

    これを実行するとページは表示されるのですが、名前や題名、本文に日本語を入力すると 例えば名前に「山田」と入れ送信すると投稿者のところに何も出ません どうすれば解決できますか?環境はWin7でサーバは用意されたものを使用しているので 設定等の必要はありません。 画像は上が送信前、下が送信後です <?php $lines = file('bbs2.txt'); if ($_POST['write']) { $items = explode("\t", $lines[0]); $no = $items[0] + 1; $name = htmlspecialchars($_POST['name']); if (!$name) $name = "名無しさん"; $mail = htmlspecialchars($_POST['mail']); $title = htmlspecialchars($_POST['title']); if (!$title) $title = "無題"; $contents = htmlspecialchars($_POST['contents']); $contents = str_replace("\r\n", "<br>", $contents); $contents = str_replace("\r", "<br>", $contents); $contents = str_replace("\n", "<br>", $contents); $delkey = htmlspecialchars($_POST['delkey']); $time = date("Y/m/d H:i:s"); $expire = time() + 3600 * 24 * 30; setcookie("name", $name, $expire); setcookie("mail", $mail, $expire); setcookie("delkey", $delkey, $expire); $data = "$no\t$name\t$mail\t$title\t$contents\t$delkey\t$time\n"; array_unshift($lines, $data); } else { $name = $_COOKIE['name']; $mail = $_COOKIE['mail']; $delkey = $_COOKIE['delkey']; } if ($_POST['delete']) { for ($i = 0; $i < count($lines); $i++) { $items = explode("\t", $lines[$i]); if ($items[0] == $_POST['delno'] && $items[5] == $_POST['delkey2']) { array_splice($lines, $i, 1); } } } if ($_POST['write'] || $_POST['delete']) { $fp = fopen('bbs2.txt', 'w'); foreach($lines as $line) fputs($fp, $line); fclose($fp); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>掲示板2</title> </head> <body> <form method="post" action="bbs2.php"> お名前:<input type="text" name="name" value="<?php print $name ?>"><br> メール:<input type="text" name="mail" value="<?php print $mail ?>"><br> 題 名:<input type="text" name="title"><br> 削除キー:<input type="password" name="delkey" value="<?php print $delkey ?>"><br> <textarea name="contents" cols="60" rows="5"></textarea><br> <input type="submit" name="write" value="送信"> <hr> 記事番号:<input type="text" name="delno">  削除キー: <input type="password" name="delkey2">  <input type="submit" name="delete" value="記事削除"> </form> <hr> <?php foreach($lines as $line) { $line = rtrim($line); $items = explode("\t", $line); print "No.{$items[0]} "; print "<b>{$items[3]}</b> 投稿者:"; if ($items[2]) print "<a href='mailto:{$items[2]}'>"; print $items[1]; if ($items[2]) print "</a>"; print " 投稿時間:{$items[6]}"; print "<p>{$items[4]}</p><hr>\n"; } ?> </body> </html>

    • 締切済み
    • PHP
  • 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の日本語が□(四角)に文字化けします。

    PHPでテキストファイルの検索結果をソートして出力するスクリプトで文字化けが出て困って います。 テキストファイル&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293; 20101225|第二会議室|1200|1300|就職面接 20101225|第一会議室|1300|1400|打ち合わせ 20101225|第一会議室|1500|1600|テスト 20101225|第一会議室|0900|1000|会議 20101225|第一会議室|1200|1300|休憩 20101224|第一会議室|1200|1500|クリスマス会 スクリプト(抜粋)&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293; //$_GET["year"]) = 2010; //$_GET["title"]) = "第一会議室"; //$_GET["month"] = 12; //$_GET["day"] = 25; foreach ($schedule_list as $lineno => $line) { list($schedule_date, $title, $str_time, $end_time, $body) = explode("|", $line); if ($schedule_date == date("Ymd", mktime(0, 0, 0, $_GET["month"], $_GET["day"], $_GET["year"])) && $title == $_GET["title"]) { //抽出結果を配列に格納 $data[] = array( 'sch_date'=>$schedule_date ,'title'=>"$title", 'str'=>$str_time, 'end'=>$end_time, 'body'=>"$body", 'no'=>$lineno); } } //開始時間(昇順)でソート //array_multisort($str, SORT_ASC, $end, $sch_date, $title, $body, $no, $data); foreach ($data as $key => $row) { $sch_date[$key] = $row['sch_date']; $title[$key] = $row['title']; $str[$key] = $row['str']; $end[$key] = $row['end']; $body[$key] = $row['body']; $no[$key] = $row['no']; } 表示結果(1)&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;  print_r($data);  配列データの全体を表示すると、日本語も正しく表示されます。 Array ( [0] => Array ( [sch_date] => 20101225 [title] => 第一会議室 [str] => 1300 [end] => 1400 [body] => 打ち合わせ [no] => 1 ) 表示結果(2)&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;  print_r($sch_date[0]); print_r($title[0]); print_r($str[0]); print_r($end[0]); print_r($body[0]); print_r($no[0]);  配列データの要素を指定して出力すると日本語が□になります。  20101225&#65533;13001400&#65533;1 以上、どなたかご教授下さい。 日付   会議室 開始時間 終了時間 使用者 20101225 &#65533;     1300    1400   &#65533;

    • ベストアンサー
    • PHP
  • HTML_Template_Sigma

    HTML_Template_Sigma を使って、テンプレートを作っています。 下記に、使用中のソースとテンプレートを示します。 data_list ブロック内で表示する {title} {date} をそのまま表示したいのですが、それぞれ、タイトル、日付、に置換されてしまいます。何か解決策はないでしょうか? ==== sigma_test.php ==== <?php require_once "HTML/Template/Sigma.php"; $tpl =& new HTML_Template_Sigma(dirname(__FILE__)); $tpl->loadTemplateFile("sigma_test.html", false, true); $hoge = array('{title}','ほげ','{date}',); foreach ($hoge as $data){ $tpl->setVariable('data_list',$data); $tpl->parse('data_list'); } $tpl->setVariable('title',"タイトル"); $tpl->setVariable('date',"日付"); $tpl->setVariable('body',"本文"); $tpl->show(); ?> ==== sigma_test.html ==== <?xml version="1.0" encoding="EUC-JP"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <head> <title>メモ</title> </head> <body> <div id="content"> <div id="head"></div> <div id="menu"> <ul> <!-- BEGIN data_list --> <li><a href="">{data_list}</a></li> <!-- END data_list --> </ul> </div> <div id="main"> <dl> <dt>タイトル</dt> <dd>{title}</dd> <dt>日付</dt> <dd>{date}</dd> <dt>本体</dt> <dd>{body}</dd> </dl> </div> </div> </body> </html>

    • 締切済み
    • PHP
  • phpで動的タイトル

    phpで動的タイトルを作りたいのですが$page_titleが 表示できません。 body.phpに<html>~<body>を書きindex.phpに読み込み表示させ index.phpに$page_titleがあればタイトルに表示させるように したく下記のようにしてみましたが表示されませんでした。 試しにindex.phpの$page_titleを消すとタイトルの文字のみが 出力されるので値があるかについては大丈夫かと思うのですが どのようにすれば表示されるのでしょうか? ---body.php--- if($page_titel) { echo "<title>タイトル - ".$page_title."</title>\n"; } else { echo "<title>タイトル</title>\n"; } ---index.php--- $page_titel = "ページタイトル"; require_once "body.php";

    • ベストアンサー
    • PHP
  • CSSのJavaScript参照

    JavaScriptによって変数に代入された文字列をCSSで参照し、 指定した場所に表示したいのですが、変数名が表示され代入された文字列が表示されません。 ソース <html><head> <title>a</title> <style type="text/css"> <!-- .str{ top:100px; left:10px; position:absolute; }--> </style> </head> <body> <div class="str3">str();</div> //ここで変数strに代入されたaを表示したい <SCRIPT LANGUAGE="JavaScript"> str = "a"; str(){document.write(str);} </SCRIPT></body></html> 初心者のため、間違いが多々あると思いますがよろしくお願いします。