基本if / then用PHP

时间:2009-03-06 01:39:18

标签: php

好吧所以我设置了这个东西,这样我就可以打印出人们来自的页面,然后在某些页面上放置虚拟标签。有些页面注释掉了“linkto”标签,其中包含文字。

我的问题是我的某些网页没有“linkto”文字。当我从那里链接到这个页面时,我想让它抓住“title”和“/ title”之间的所有内容。如何更改eregi,以便如果它变为空,那么它应该获取标题?

这是我到目前为止所知道的,我知道我只需要某种if / then但我是初学者。提前感谢您的帮助:

<?php
$filesource = $_SERVER['HTTP_REFERER'];
$a = fopen($filesource,"r"); //fopen("html_file.html","r");
$string = fread($a,1024);
?>
<?php
if (eregi("<linkto>(.*)</linkto>", $string, $out)) {
     $outdata = $out[1];
}
//echo $outdata;
$outdatapart = explode( " " , $outdata);
echo $part[0];
?> 

4 个答案:

答案 0 :(得分:3)

在这里:如果eregi()无法匹配,$ outdata赋值将永远不会发生,因为if块将不会被执行。如果它匹配,但标签之间没有任何内容,$ outdata将被分配一个空字符串。在这两种情况下,!$ outdata都是真的,所以我们可以回退到标题标签上的第二个匹配。

if(eregi("<linkto>(.*?)</linkto>", $string, $link_match)) {
    $outdata = $link_match[1];
}
if(!$outdata && eregi("<title>(.*?)</title>", $string, $title_match)) {
    $outdata = $title_match[1];
}

我还将匹配中的(。*)更改为(。*?)。这意味着,不要贪心。在(。*)表单中,如果您将$ string设置为

<title>Page Title</title>  ... 
  ... <iframe><title>A second title tag!</title></iframe>

正则表达式匹配

Page Title</title> ... ... <iframe><title>A second title tag!

因为它试图尽可能地匹配,只要文本在任何和任何其他之间!在(。*?)形式中,匹配符合您的期望 - 匹配

Page Title

一旦能够就停止。

...

顺便说一句,这件事是一个有趣的计划,但你为什么需要呢?页面可以链接到其他页面并通过查询字符串传递参数:

<a href="somescript.php?prevpage=Foo">...</a>

然后somescript.php可以通过$ _GET ['prevpage']超全局变量访问prevpage参数。

这会解决你的问题吗?

答案 1 :(得分:1)

从PHP 5.3.0开始,POSIX正则表达式扩展(ereg等)将被弃用,并且可能完全不再使用PHP 6,你最好使用PCRE函数(preg_match和朋友)。

PCRE功能也更快,二进制安全并支持更多功能,如非贪婪匹配等。

只是一个指针。

答案 2 :(得分:0)

你需要,否则。

if(eregi(...))
{
    .
    .
    .
}
else
{
    just grab title;
}
也许你应该做一个快速的谷歌搜索来找到这个非常简单的答案。

答案 3 :(得分:0)

在将匹配项分配给if之前,只需添加其他$outdata测试:

if (eregi("<linkto>(.*)</linkto>", $string, $out)) {
    if ($out[1] != "") {
        $outdata = $out[1];
    } else {
        // Look in the title.
    }
}