BBCode に似たユーザー エントリに基づいてページに画像を動的に挿入する単純化されたコードを作成しようとしています。
たとえば、ユーザーの 1 人が「アヒル [image]アヒル [/image] が好き」と入力した場合、[image]アヒル [/image] を爆発させ、MySQL でキーワード「アヒル」を検索し、画像パスをプルします。 & 一致するデータベースから名前を取得し、画像の HTML コードと画像のソースを表示します。
function image_replace($dimg){
list($title) = explode("[image]",$dimg);
$query_image = mysql_query("SELECT * FROM images WHERE image_title LIKE '%$title%'");
$fetch_image = mysql_fetch_array($query_image);
$image_path = $fetch_image['image_path'];
$image_filename = $fetch_image['image_filename'];
$image_source = $image_path.$image_filename;
$dimg = str_replace("[image]","<img src=\"$image_source\">", $dimg);
$dimg = str_replace("[/image]","</img>", $dimg);
$dimg = str_replace("$title", "", $dimg);
return $img;
}
image_replace($ducks);
私がぶつかっている壁は、動的に生成されたページ内のテキストが存在する場合はそれを置き換える方法であり、コードが存在しない場合はコンテンツをそのままにしておく方法です。何か案は?
編集 - 問題を複雑にする:
助けてくれてありがとう!あなたの入力を使用して、次の関数を作成しました。
function image_replace($string){
$matches = array();
preg_match('/\[image\](.*)\[\/image\]/', $string, $matches);
$image = $matches[1];
$query_image = mysql_query("SELECT * FROM images WHERE image_title LIKE '%$image%'");
$fetch_image = mysql_fetch_array($query_image);
$image_path = $fetch_image['image_path'];
$image_filename = $fetch_image['image_filename'];
$image_source = $image_path.$image_filename;
$image_url = "<img src=\"$image_source\"></img>";
$new_string = preg_replace('/\[image\](.*)\[\/image\]/', $image_url, $string);
return $new_string;
}
発生するインスタンスの数に関係なく、これが機能する必要があります (したがって、ユーザーが [image]duck[/image] と書いてから、2 つの文の後で [image]cow[/image] と書いた場合、関数で両方をそれぞれに置き換える必要があります)。結果)。現状では、インスタンスが複数ある場合、(有効な SQL リソースではなく) エラーになります。コンセプトをテストするためにループ (while & foreach w/ preg_match_all) を作成してみました - どちらも無限ループを作成し、私の Web サーバー管理者はあまり満足していません:p