English 中文(简体)
基本的PHP if/then语句
原标题:
  • 时间:2009-03-06 01:39:17
  •  标签:

好的,所以我设置了这个东西,以便我可以打印出人们来自哪个页面,然后在某些页面上放置虚拟标签。一些页面已经注释了带有文本的“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];
?> 
最佳回答

这就是:如果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>  I am sorry, but you did not provide any text or phrase for me to translate into Chinese. Please provide me with the correct text or phrase that you want me to translate. 
  I am sorry, but you did not provide any text or phrase for me to translate into Chinese. Please provide me with the correct text or phrase that you want me to translate. <iframe><title>A second title tag!</title></iframe>

正则表达式将匹配

Page Title</title> I am sorry, but you did not provide any text or phrase for me to translate into Chinese. Please provide me with the correct text or phrase that you want me to translate. I am sorry, but you did not provide any text or phrase for me to translate into Chinese. Please provide me with the correct text or phrase that you want me to translate. <iframe><title>A second title tag!

因为它尝试尽可能地匹配,只要文本位于任何<和>之间! 在(.?*)表单中,匹配会如您所期望地执行 - 它会匹配。

Page Title

一旦可能就停止。

I am sorry, but you did not provide any text or phrase for me to translate into Chinese. Please provide me with the correct text or phrase that you want me to translate.

顺便说一句,这个东西是个有趣的方案,但你为什么需要它?页面可以通过查询字符串链接到其他页面并传递参数。

<a href="somescript.php?prevpage=Foo">I am sorry, but you did not provide any text or phrase for me to translate into Chinese. Please provide me with the correct text or phrase that you want me to translate.</a>

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

那樣做能解決你的問題嗎? (nà yàng zuò néng jiějué nǐ de wèntí ma?)

问题回答

POSIX正则表达式扩展(ereg等)将从PHP 5.3.0开始弃用,并且在PHP 6到来时可能完全消失,最好使用PCRE函数(preg_match和其它函数)。

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

只是提醒。

你需要if,else。

if(eregi(...))
{
    .
    .
    .
}
else
{
    just grab title;
}

也许你应该进行一次快速的谷歌搜索,以找到这个非常简单的答案。

在将匹配分配给$outdata之前,请添加另一个if测试:

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




相关问题
热门标签