базовый if / then с PHP - PullRequest
       24

базовый if / then с PHP

1 голос
/ 06 марта 2009

Хорошо, я настроил эту штуку так, чтобы я мог распечатать страницу, с которой пришли люди, а затем поставить фиктивные теги на определенных страницах. Некоторые страницы закомментировали теги "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 ]

3 голосов
/ 06 марта 2009

Вот и все: если eregi () не соответствует, назначение $ outdata никогда не произойдет, так как блок if не будет выполнен. Если это совпадает, но между тегами ничего нет, $ outdata будет присвоена пустая строка. В обоих случаях! $ Outdata будет иметь значение true, поэтому вместо этого мы можем вернуться ко второму совпадению в теге title.

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 может получить доступ к параметру prevpage через суперглобальную переменную $ _GET ['prevpage'].

Это решит вашу проблему?

1 голос
/ 10 марта 2009

Расширение POSIX regex (ereg и т. Д.) Устарело с PHP 5.3.0 и может полностью исчезнуть в PHP 6, лучше использовать функции PCRE (preg_match и друзья).

Функции PCRE также быстрее, безопасны в двоичном формате и поддерживают больше функций, таких как не жадное сопоставление и т. Д.

Просто указатель.

0 голосов
/ 06 марта 2009

Просто добавьте еще один if тест, прежде чем назначить совпадение для $outdata:

if (eregi("<linkto>(.*)</linkto>", $string, $out)) {
    if ($out[1] != "") {
        $outdata = $out[1];
    } else {
        // Look in the title.
    }
}
0 голосов
/ 06 марта 2009

если нужно, иначе.

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

возможно, вам нужно было сделать быстрый поиск в Google, чтобы найти этот очень простой ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...