我有一个表单,当一个网址放在表单中并点击按钮时,URL就会被处理,并根据pregmatch提取一个URL。当找到其中一个匹配时,其他人会返回错误Notice: Undefined offset: 1
我该怎样才能做到这一点,如果找到一个匹配,其他人没有给出错误?
if ( !isset( $_GET['go'] ) ) return;
$userLink = $_GET['go'] ;
if ( !$userLink ) return;
$data = file_get_contents($userLink);
preg_match("@^(?:\s)*var url = '(.*)';@mi",$data, $parsed1);
preg_match("@^(?:\s)*self.location = '(.*)';@mi",$data, $parsed2);
preg_match("@^(?:\s)*window.location = \"(.*)\";@mi",$data, $parsed3);
preg_match("@^(?:\s)*Lbjs.TargetUrl = '(.*)';@mi",$data, $parsed4);
preg_match("@^(?:\s)*linkDestUrl = '(.*)';@mi",$data, $parsed5);
echo 'var.url - ' . $parsed1[1] . '<br>';
echo 'self.location - ' . $parsed2[1] . '<br>';
echo 'window.location - ' . $parsed3[1] . '<br>';
echo 'Lbjs.TargetUrl - ' . $parsed4[1] . '<br>';
echo 'linkDestUrl - ' . $parsed5[1];
答案 0 :(得分:0)
您需要做的就是在打印前检查元素是否已设置:
echo 'var.url - ' . (isset($parsed1[1]) ? $parsed[1] : 'not found') . '<br>';
echo 'self.location - ' . (isset($parsed1[2]) ? $parsed[2] : 'not found') . '<br>';
echo 'window.location - ' . (isset($parsed1[3]) ? $parsed[3] : 'not found') . '<br>';
echo 'Lbjs.TargetUrl - ' . (isset($parsed1[4]) ? $parsed[4] : 'not found') . '<br>';
echo 'linkDestUrl - ' . (isset($parsed1[5]) ? $parsed[5] : 'not found');
答案 1 :(得分:0)
您可以尝试捕获preg_match
的结果,如果未找到匹配项,则返回0。来自php docs:
preg_match()返回模式匹配的次数。那将是 0次(不匹配)或1次
类似的东西:
if(preg_match("@^(?:\s)*var url = '(.*)';@mi",$data, $parsed1)) {
if(!empty($parsed1[1])) { echo 'var.url - ' . $parsed1[1] . '<br>'; }
}
答案 2 :(得分:0)
我假设只有一种网址类型匹配,而不是两种或更多?
if ( !isset( $_GET['go'] ) ) return;
$userLink = $_GET['go'] ;
if ( !$userLink ) return;
$data = file_get_contents($userLink);
$array = array(
'var url',
'self.location',
'window.location',
'Lbjs.TargetUrl',
'linkDestUrl',
);
foreach ($array as $value)
{
if (preg_match("@^(?:\s)*($value) = '(.*)';@mi",$data, $parsed))
{
break;
}
}
echo $parsed[1] . ' - ' . $parsed[2] . '<br>';
答案 3 :(得分:0)
您可以在每个preg_match语句之前放置一个@。 @抑制错误消息,因此在使用它时要小心。
@preg_match("@^(?:\s)*var url = '(.*)';@mi",$data, $parsed1);
答案 4 :(得分:0)
if (preg_match("@^(?:\s)*(var url|self.location|window..location|Lbjs.TargetUrl|linkDestUrl) = ['\"](.*)[\"'];@mi", $data, $parsed)) {
echo $parsed[1], " - ", $parsed[2];
} else {
echo "no matches found at all";
}