人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

[PHP]正規表現で文字列内の指定文字をhtmlタグを置き換えて、さらに出力する方法を教えてください。

↓検索・置き換え対象
$data = "IMG[1]<br />一つ目の画像<br />IMG[2]<br />二つ目の画像";

↓下のファンクションに渡し
IMG_DATA($data);

↓指定した"IMG[***]"の数字を取り出してDBに登録しているアドレスを取り出す
function IMG_DATA($a){
preg_match_all("/IMG\(([\d]+)\)/",$a,$keywords,PREG_SET_ORDER);
foreach ($keywords as $val){
$data_no = htmlspecialchars($val[1]);
$data_list = mysql_query("select * from img where id = $data_no");
while($src = mysql_fetch_array($data_list)){
$img_data = "<p><img src='$src[0]' /></p>";//$srcは画像のURLが入っています。
$img_last = mb_ereg_replace("/$val[0]/",$a,$img_data);
print "$img_last";
}
}
}

上記でとりあえず検索・置き換え対象からimgタグに変換することは出来たのですが、
目的としては、

↓「目標」
[画像]
1つ目の画像
[画像]
2つ目の画像

としたかった所が

↓「現実」
[画像]
[画像]

となって画像以外のデータがどこかへ行ってしまいます。
目標にするためにはどういった修正を行えばいいでしょうか?

初めてなもので質問する要領が判らないのですがお願いします。

環境はPHP5・UTF-8・WindowsXPです。

●質問者: goolin
●カテゴリ:ウェブ制作
✍キーワード:AS dB HTML print SELECT
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● mattn
●30ポイント

http://www.php.net/ URLダミー

preg_match_all("/IMG\(([\d]+)\)/",$a,$keywords,PREG_SET_ORDER);

ではなく

preg_match_all("/IMG\[([\d]+)\]/",$a,$keywords,PREG_SET_ORDER);

かと思います。

[]

は文字クラスを示すので実際の文字として検索するにはエスケープする必要があります。

\[\]
◎質問者からの返答

ご回答ありがとうございます、質問するコードを間違えていたとは・・・

質問が下手で申し訳ありません;;、IMG(1)とIMG(2)の画像の置き換えは出来たのですが、IMG(1)とIMG(2)以外の文字"一つ目の画像・・・二つ目の画像"表示をどうしても表示出来なくて困っていました。

二度手間で申し訳ありませんが教えていただけませんでしょうか?orz


2 ● makeworld
●80ポイント ベストアンサー

こんな感じでしょうか。

function IMG_DATA($a){
 preg_match_all("/IMG\(([\d]+)\)/",$a,$keywords,PREG_SET_ORDER);
 foreach ($keywords as $val){
 $val[0] = strtr($val[0], array('(' => '\(', ')' => '\)'));
 $data_no = htmlspecialchars($val[1]);
 $data_list = mysql_query("select * from img where id = $data_no");
 while($src = mysql_fetch_array($data_list)){
 $img_data = "<p><img src='$src[0]' /></p>";//$srcは画像のURLが入っています。
 $img_last = mb_ereg_replace($val[0], $img_data, $a);
 if($img_last !== FALSE) $a = $img_last;
 }
 }
 print $a;
}
◎質問者からの返答

具体的なコード提示ありがとうございます!

正規表現をちゃんと勉強し始めたばかりなので助かります。

今テストできる環境ではないので明日試して見ます。

ありがとうございました

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ