2015-01-05 2 views
1

PHP의 strpos() 기능에 약간 이상한 동작이 있습니다. 그러나PHP strpos가 "<"을 찾지 못합니다.

<?php 
$i = 0; 
$hierarchySeparator = " < "; 
$subjects = explode(", ", $elementText); 

// loop through keywords 
foreach ($subjects as $subject) : 

    // look for hierarchical keywords 
    $found = strpos($subject, $hierarchySeparator); 

    if($found !== false) : 

     // extract and loop through hierarchical list 
     $subSubjects = explode($hierarchySeparator, $subject); 
     $j = 1; 

     foreach ($subSubjects as $subSubject) : ?> 
      <a href="<?php echo url('/mySearch?q=' . $subSubject) ; ?>"><?php echo $subSubject; ?></a> 
      <?php 
      // Re-ouput all relevant < signs 
      if($j < count($subSubjects)) { 
       echo " < "; 
      } 
      $j++; 
     endforeach; 
    else : ?> 
     <a href="<?php echo url('/mySearch?q=' . $subject) ; ?>"><?php echo $subject; ?></a>    
    <?php endif; 

    // output commas to "nicefy" list output 
    $i++; 
    if($i < count($subjects)) { 
     echo ","; 
    } 
endforeach; ?> 

:

$elementText = "Bluffs, Cliffs, Grasses, Oceans, Rocks < Materials"; 

그리고 여기에 기능입니다 : 나는

다음 예제 문자열을 수 있습니다 .. 각 키워드에 대한 키워드와 출력의 URL 문자열을 통해 루프 필요 내 서버에서 PHP가 "<"기호를 감지하지 못하여 계층 적 키워드를 올바르게 구분하지 못합니다. 구분 기호로 <을 사용하여 폭발하려고해도 작동하지 않습니다.

이상한 점은 테스트 파일을 만들고 원하는대로 정확하게 실행되는 명령 줄에서 수동으로 실행할 수 있다는 것입니다.하지만 서버에서 실행하려고 할 때 테스트 파일을 수동으로 실행할 수는 있습니다.

해결 방법에 대한 아이디어가 있으십니까?

+3

어떻게 데이터 문자열을 입력하고 있습니까? >을 (를) > (으)로 마술로 탈출하고 있습니까? 문자열을 덤프하고 소스를 확인하여 확인하십시오. – Phil

+0

그게 전부 야! 의견을 보내 주셔서 감사합니다. – AnuragBabaresco

답변

6

정말로 < 이겠지만 &lt;과 같은 것이 아니겠습니까? html을 렌더링하는 경우 브라우저가 본질적으로 "거짓말"합니다.

php > var_dump(strpos('Rocks < Materials', ' < ')); 
int(5) 
php > var_dump(strpos('Rocks &lgt; Materials', ' < ')); 
bool(false) 
php > var_dump(strpos('Rocks < Materials', ' &lt; ')); 
bool(false) 
+0

그게 전부입니다. 문자열을'var_dump '할 때'<'으로 인코딩되었음을 명확하게 보여줍니다. – AnuragBabaresco

관련 문제