我正在为字符串制作一个过滤器,它会过滤掉数组中使用数字符号“#”找到的字符串中的任何单词。它似乎没有用。
以下是我的网址参数: http://www.mydomain.com/test.php?str=Noob%20no
<?php
$blacklist = array("noob","yes");
$t = "";
$str = explode(" ",strtolower($_GET["str"]));
foreach ($str as $i) {
$s = str_replace($i, str_repeat("#", strlen($i)), $blacklist);
$t = $t . $s[0];
}
echo $t;
?>
这是“noob no:”输出的内容
######的ob
它应该回应这样的事情:
#### no
答案 0 :(得分:1)
$blacklist = array("noob","yes");
$words = explode(" ", $_GET["str"]);
foreach($words as &$word) {
if(in_array(strtolower($word), $blacklist)) {
$word = str_repeat("#", strlen($word));
}
}
echo implode(' ', $words);
你的根本问题在于你如何使用str_repeat()
,但我清理了一下。我传递了单词by reference,然后如果单词(这里是我们strtolower,感谢@Thomas)是黑名单的一部分,我们将用$word
替换#
。最后,我们将implode()
获取最终字符串。
最后的例子:IDE One。
答案 1 :(得分:0)
您未使用str_replace()功能。
试试这个:
$blacklist = array("noob", "yes");
$t = "";
$str = explode(" ", strtolower($_GET["str"]));
foreach ($str as $word) {
$s = in_array($word, $blacklist)? str_repeat("#", strlen($word)): $word;
$t = $t . " " . $s;
}
echo $t;
答案 2 :(得分:0)
试试这段代码:
<?php
$blacklist = array("noob","yes");
$t = "";
$str = explode(" ",strtolower($_GET["str"]));
foreach ($str as $i) {
if (in_array($i, $blacklist))
$i = str_replace($i, str_repeat("#", strlen($i)), $i);
$t .= $i." ";
}
echo trim($t);
?>
答案 3 :(得分:0)
$blacklist = array("noob","yes");
$t = "";
$str = explode(" ",strtolower("Noob no"));
foreach ($str as $i) {
if ( in_array($i,$blacklist) ) {
$i = str_repeat('#',strlen($i));
}
$t = $t . $i . " ";
}
echo $t;