замена динамического текста изображением - PullRequest
1 голос
/ 09 февраля 2011

Я пытаюсь создать упрощенный код для динамической вставки изображений на страницу на основе пользовательской записи, аналогичной BBCode.

Например, если один из моих пользователей печатает "Мне нравятся утки [изображение] утки [/ 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], то два предложения позже[image] корова [/ image], я хочу, чтобы функция заменила оба с их соответствующим результатом).В настоящее время, с более чем одним экземпляром, это ошибки (не допустимый ресурс SQL), что имеет смысл, так как preg_match ищет только один.Я попытался создать цикл (while & foreach w / preg_match_all), чтобы попытаться проверить концепцию - оба создали бесконечные циклы, и администратор моего веб-сервера не очень доволен: p

1 Ответ

1 голос
/ 09 февраля 2011

Я бы попытался сделать это с preg_match, чтобы получить image_url и preg_replace, чтобы заменить его:

$string = 'I like ducks [image]ducks[/image]';
echo 'Before: ' . $string . '<br />';
$matches = array();
preg_match('/\[image\](.*)\[\/image\]/', $string, $matches);
$image = $matches[1];
//Lookup image_url and throw it in an <img>
$image_url = 'http://blah.com'; //Don't forget <img>
$new_string = preg_replace('/\[image\](.*)\[\/image\]/', $image_url, $string);
echo 'After: ' . $new_string;

редактировать

$string = "<br />I like ducks [image]ducks[/image]<br />I like cows [image]cows[/image]<br />I like pigs [image]pigs[/image]";
echo 'Before: ' . $string . '<br />';

$matches = array();
preg_match_all('/\[image\]([^\[]*)\[\/image\]/', $string, $matches);
$image_names = $matches[1];
foreach($image_names as $image_name) {
    //Perform your lookup on each name
    //If it is valid perform the replace
    //Gonna say cows isn't there to test
    if($image_name != 'cows') {
        $image_url = 'http://blah.com'; //result of lookup
        $string = preg_replace('/\[image\]' . $image_name . '\[\/image\]/', $image_url, $string);
    }
}
echo 'After: ' . $string;
...