Заменить контент на странице php

У меня есть несколько запрещенных слов, которые хранятся в базе данных.

Вещи, которые мне нужно сделать, это заменить их все новыми разрешенными словами.

Я сделал что-то подобное

//Inclusion du fichier à parser
require_once GETCASH_BASE_PATH . '/GESTION/pages_html/index.phtml'; // Layout principal
//Récupération du contenu
$buffer = ob_get_clean();


//Modification du contenu
$mots_interdits = censure();
while ($censure = mysql_fetch_assoc($mots_interdits)):
    $new = str_replace($censure['mot'], $censure['mot2'], $buffer);
endwhile;
//On affiche le nouveau contenu
echo $new;

функция находится в другом файле

/**
 * fonction qui requete la censure
 * @return type
 */
function censure() {
    $query = "SELECT `mot`, `mot2` FROM `censure`";
    $result = mysql_query($query);
    return $result;
}

У меня проблема в том, что он заменяет только одно запрещенное слово, я хотел бы, чтобы он мог заменить все слова.

любая помощь будет высоко ценится.

4 ответа

Решение

Вы должны передавать значение $new в буфер после каждого str_replace, иначе вы получите только последнюю цензуру в конце

while ($censure = mysql_fetch_assoc($mots_interdits)):
    $new = str_replace($censure['mot'], $censure['mot2'], $buffer);
    $buffer = $new
endwhile;

Ваша функция str_replace использует $buffer в качестве входных данных, она не изменяет ее. Вы должны убедиться, что ваш цикл повторяет, что вы используете текущую, уже измененную строку в качестве входных данных для функции str_replace. Попробуйте что-то вроде этого:

$mots_interdits = censure();
while ($censure = mysql_fetch_assoc($mots_interdits)):
    $buffer = str_replace($censure['mot'], $censure['mot2'], $buffer);
endwhile;

// На самом деле, contenu echo $buffer;

Вы также можете использовать массивы слов:

$phrase  = "You should eat fruits, vegetables, and fiber every day.";
$healthy = array("fruits", "vegetables", "fiber");
$yummy   = array("pizza", "beer", "ice cream");

$newphrase = str_replace($healthy, $yummy, $phrase);

Используйте preg_replace() вместо str_replace(),

 preg_replace($censure['mot'], $censure['mot2'], $buffer, 1); 
Другие вопросы по тегам