0

我有一些禁用词,而不是存储在数据库中。

我需要做的就是用授权的新词替换所有这些。

我做了类似的事情

//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

4 回答 4

2

您必须在每次 str_replace 之后将 $new 值赋予缓冲区,否则您只会在最后得到最后一次审查

while ($censure = mysql_fetch_assoc($mots_interdits)):
    $new = str_replace($censure['mot'], $censure['mot2'], $buffer);
    $buffer = $new
endwhile;
于 2014-04-07T13:46:44.543 回答
1

您也可以使用单词数组:

$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);
于 2014-04-07T13:42:38.963 回答
1

您的 str_replace 函数使用 $buffer 作为输入,它不会修改它。您需要确保在循环迭代时使用当前已修改的字符串作为 str_replace 函数的输入。尝试这样的事情:

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

//关于 affiche le nouveau contenu echo $buffer;

于 2014-04-07T13:49:10.780 回答
-1

使用 preg_replace() 而不是 str_replace(),

 preg_replace($censure['mot'], $censure['mot2'], $buffer, 1); 
于 2014-04-07T13:42:29.710 回答