好吧所以我设置了这个东西,这样我就可以打印出人们来自的页面,然后在某些页面上放置虚拟标签。有些页面注释掉了“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];
?>
答案 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.
}
}