创建一个处理重定向到外部位置的类。我创建了一个名为isBlocked
的方法,它返回一个布尔结果。此功能的工作原理如下:
它遍历$_blocked
变量并且compare是找到的输入字符串,它返回true,否则返回false。贝娄实际上是我的解释还不够。
public static function isBlocked($location)
{
for($i = 0; $i < sizeof(self::$_blocked); $i++)
{
if(self::$_blocked[$i] === $location)
{
return true;
}
else
{
return false;
}
}
}
这非常有效,问题就出现了,例如,让我们说“google.com”在列表中并且输入为“www.google.com”,它将返回false。这是显而易见的,因为我使用相同的运算符===
。
问题如下:PHP中是否有任何与url_encode
&amp; url_decode
?我显然可以创建一个正则表达式,但如果有任何其他方法,请告诉我。
提前致谢。
答案 0 :(得分:2)
我发现匹配是向后的,因为它是多对一的,其中一个匹配堆栈中任何一个的(子)部分。因此,在这种情况下,我们可以使用strpos()
(代替正则表达式):
function find_reverse_match($needle, $haystack) {
$i = 0;
$c = count($haystack);
while ($i < $c) {
if (strpos($needle, $haystack[$i++]) !== false) {
return true;
}
}
return false;
}
答案 1 :(得分:1)
我举个例子: Php Search_Array using Wildcard 写了@JaredFarrish并采用了这个特例:
<?php
function isBlocked($location)
{
$blocked = [
'google.com',
'www.google.com',
'play.google.com',
'developers.google.com',
];
$matches = preg_grep("/^(www)?$location$/", $blocked);
if (empty($matches)) {
return false;
} else {
return true;
}
}
print isBlocked('play.google.com'); // 1
print isBlocked('www.google.com'); // 1
print isBlocked('google.com'); // 1
print isBlocked('stackoverflow.com'); // 0
答案是:你应该写正则表达式)
答案 2 :(得分:1)
没有php函数只替换字符串中的第一个匹配项,因此preg_replace()和in_array()将完成这项工作:
$blocked = array(
'www.google.com',
'yahoo.com'
);
var_dump( in_array( preg_replace( '/^www\./', '', 'google.com' ), preg_replace( '/^www\./', '', $blocked ) ) ); // true
var_dump( in_array( preg_replace( '/^www\./', '', 'www.yahoo.com' ), preg_replace( '/^www\./', '', $blocked ) ) ); // true
var_dump( in_array( preg_replace( '/^www\./', '', 'www.facebook.com' ), preg_replace( '/^www\./', '', $blocked ) ) ); // false
答案 3 :(得分:0)
您是否可以将字符串替换为www。?
public static function isBlocked($location)
{
for($i = 0; $i < sizeof(self::$_blocked); $i++)
{
if(self::$_blocked[$i] === str_replace("www.","",$location))
{
return true;
}
return false;
}
}
Psuedo代码。
NVM。好像你说你可以做表达
也许使用
parse_url