我需要一些关于strpos()的帮助。
需要构建匹配包含/apple-touch
的任何网址的方法,但也需要保持匹配的细节,例如"/favicon.gif"
等
目前,匹配作为数组的一部分单独列出:
<?php
$errorurl = $_SERVER['REQUEST_URI'];
$blacklist = array("/favicon.gif", "/favicon.png", "/apple-touch-icon-precomposed.png", "/apple-touch-icon.png", "/apple-touch-icon-72x72-precomposed.png", "/apple-touch-icon-72x72.png", "/apple-touch-icon-114x114-precomposed.png", "/apple-touch-icon-114x114.png", "/apple-touch-icon-57x57-precomposed.png", "/apple-touch-icon-57x57.png", "/crossdomain.xml");
if (in_array($errorurl, $blacklist)) { // do nothing }
else { // send an email about error }
?>
有什么想法吗?
非常感谢您的帮助
答案 0 :(得分:1)
您可以使用str_replace
删除所有出现的黑名单项,而不是正则表达式,并将新字符串与旧字符串进行比较:
if ( str_replace($blacklist, '', $errorurl) !== $errorurl )
{
// do nothing
}
else
{
// send an email about error
}
答案 1 :(得分:0)
如果你想为此使用正则表达式,并且你想要一个正则表达式字符串,它将捕获现有黑名单中的所有值,并且匹配任何apple-touch
字符串,那么这样的事情就可以了。
if(preg_match('/^\/(favicon|crossdomain|apple-touch.*)\.(gif|png|xml)$/',$_SERVER['REQUEST_URI']) {
//matched the blacklist!
}
老实说,这比你需要的要复杂得多。
我会说你最好在你已经拥有的黑名单数组中保留像favicon.gif
等特定值;当你在列表中添加更多项目时,它会变得更容易。
我只考虑将{regex}用于apple-touch
值,因为您要阻止它们的任何变体。但即便如此,如果你使用strpos()
,它可能会更简单。