2009-03-06 2 views
1

좋아, 그래서 내가 사람들이 온 페이지를 출력하고 특정 페이지에 더미 태그를 넣을 수 있도록이 것을 설정했다. 일부 페이지는 "linkto"태그 사이에 텍스트가있는 태그를 주석 처리했습니다.기본 if/then with PHP

내 문제는 일부 페이지에 "linkto"텍스트가 없다는 것입니다. 거기에서이 페이지로 연결하면 "제목"과 "/ 제목"사이의 모든 것을 가져오고 싶습니다. 비어있는 상태가되면 제목을 붙잡아 야합니다.

여기는 내가 지금까지 가지고있는 것이지만, 나는 단지 일종의 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

$ _SERVER [ "HTTP_REFERER"]'가 비어 있지 않은 변수라고 생각하지 마십시오. 브라우저와 사람들이 아무것도 포함하지 않도록이 옵션을 설정할 수 있기 때문에 신뢰할 수없는 변수입니다. – random

+0

... 프록시도 가능합니다. – alex

답변

3

당신이 이동 : eregi()가 일치하지 않을 경우는 $ outdata 할당은 블록이 실행되지 않습니다 것처럼 결코 일어나지 않을 것입니다. 일치하지만 태그 사이에 아무 것도없는 경우 $ outdata에 빈 문자열이 할당됩니다. 두 경우 모두! $ outdata가 true가되므로 대신 title 태그에서 두 번째 일치로 폴백 할 수 있습니다.

또한 일치 항목의 (. *)을 (. *?)로 변경했습니다. 이것은 탐욕하지 말라는 의미입니다. 당신이 가지고있는 경우 (. *) 형태, $ 문자열은 가능한 한 많이 일치 시키려고하기 때문에 정규식 한 텍스트 사이에 한,

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

을 일치합니다

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

로 설정 어떤 것과 다른 것! (. *) 형태로 일치하면 기대하는대로 작동합니다. 일치하면

Page Title 

가능한 한 빨리 중지됩니다. 여담으로

...

,이 점은 흥미로운 계획이지만 필요한 이유는 무엇입니까? 페이지는 쿼리 문자열을 통해 매개 변수를 다른 페이지로 연결하고 전달할 수 있습니다

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

그런 다음 somescript.php은 $ _GET [ 'prevpage'] 슈퍼 전역 변수를 통해 prevpage 매개 변수에 액세스 할 수 있습니다.

문제를 해결할 수 있습니까?

+0

나는 거기에 전달되는 다른 물건들과 충돌 할까봐 걱정했기 때문에 모든 링크를 변경하고 싶지 않습니다. 도와 줘서 고마워. 모두들. 나는/그때해야 할 일을 알았지 만 "만약 텍스트가 없다면 그의 설명이 거기에있다"고 말하는 법을 알지 못했습니다. –

0

당신은 다른 사람이 필요합니다.

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

아마도이 간단한 대답을 찾으려면 빠른 Google 검색을 수행해야합니다.

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

와우, 그는 "나는 그것이 어떤 종류의 진술이라고 알고있다"고 말했다. ... 나는 원숭이가 이것을봤을 수도 있다는 것에 동의하지만, 그렇게 snarky가 될 필요는 없다. – patricksweeney

+0

그래, 근데 내가 원숭이를 찾을거야?! "if"를 수행하는 방법을 알고있었습니다. "no text is this this"라고 말하는 방법을 알지 못했습니다. 그래도 도와 ​​줘서 고마워. 고마워. –

0

$outdata에 경기를 할당하기 전에 그냥 다른 if 테스트를 추가 , PCRE 기능 (preg_match 및 friends)을 사용하는 것이 더 좋습니다.

PCRE 기능도 빠르고, 바이너리 안전하며 비 욕심 많은 검색과 같은 더 많은 기능을 지원합니다.

그냥 포인터.

1

POSIX 정규식 확장 (EREG 등) PHP 5.3.0 이상 사용되지 않습니다 및 PHP 6 올 완전히 사라질 수 있습니다