2017-12-30 13 views
0

PHP에서 두 HTML 태그 사이에 데이터를 제공하는 함수를 만들었습니다. 예를 들어 :PHP 함수로 HTML 태그 필터링

당신이 입력이 문자열과 시작 ($의 tag_inizio) -final 태그 ($ tag_fine) <a>-</a>을주는 경우에
<a><b><c>test</c></b></a> 

, 내 기능은 <b><c>test</c></b>를 반환합니다. 이 기능은 결코 완벽하게 작동하지 않고있다

function get_tab($data, $tag_inizio, $tag_fine) { 
    $len = strlen($data); 
    $content = array(); 
    $i = 0; 

    while (strpos($data, $tag_inizio, $i)) { 

     if ($i > $len) { 
      return $content; 
     } 

     $start = strpos($data, $tag_inizio, $i); 
     $stop = strpos($data, $tag_fine, $start); 
     $howmuch = $stop - $start; 

     $content[] = trim(substr($data, $start + strlen($tag_inizio), $howmuch - strlen($tag_inizio))); 

     $i = $stop; 
    } 

    return $content; 
} 

나에게 출력 오류를 준 : 내 코드를 이잖아. 나는 완벽하지는 않지만 여전히 일한다는 것을 안다.

get_tab($var, "<td align=\"right\" bgcolor=\"#FFFFFF\"><font size=\"1\">", "</td>") 

그리고

get_tab($var, "<td align=\"center\" bgcolor=\"#FFFFFF\"><font size=\"1\">", "</td>") 

하지만 아무도을 함께 :

get_tab($var, "<td align=\"left\" bgcolor=\"#FFFFFF\"><font size=\"1\">", "</td>") 

<td align="left" bgcolor="#FFFFFF"><font size="1"><b><a href="link">NAME</b></a> 

      </td> 

      <!-- <td align="left" bgcolor="#FFFFFF"><font size="1"><b>NAME</b></td> --> 

      <td align="right" bgcolor="#FFFFFF"><font size="1"> 

      </td> 

      <td align="right" bgcolor="#FFFFFF"><font size="1"> 9&nbsp;</td> 

      <td align="center" bgcolor="#FFFFFF"><font size="1"><img src="img\Flags\BRA.png" alt="Brasile" border="0"></td> 

      <td align="left" bgcolor="#FFFFFF"><font size="1">TEXT</td> 

      <td align="right" bgcolor="#FFFFFF"><font size="1"><b> 0.56.31</b></td> 
      <td align="right" bgcolor="#FFFFFF"><font size="1"> 20</td> 
      <td align="right" bgcolor="#FFFFFF"><font size="1">0.17.16</td> 

      <td align="right" bgcolor="#FFFFFF"><font size="1"> 1</td> 
      <td align="right" bgcolor="#FFFFFF"><font size="1"> 0.29.53</td> 

      <td align="right" bgcolor="#FFFFFF"><font size="1"> 11</td> 
      <td align="right" bgcolor="#FFFFFF"><font size="1"> 0.09.22</td> 


       <td align="right" bgcolor="#FFFFFF"><font size="1"> 1</td> 


      <td align="right" bgcolor="#FFFFFF"><font size="1">S4</td> 

       <td align="right" bgcolor="#FFFFFF"><font size="1"><b> 
       ------ 
       </b></td> 

그것은 내가 사용하지 않는 경우에만 작동 : 문제는 내가 입력이 문자열을 제공하는 경우이다

어디에 문제가 있습니까? 이 텍스트가 있음을 알고 preg_match() 함수로 확인했지만 출력 배열이 비어 있습니다.

+0

"NAME"스크립트를 삭제해도 문제가 없습니다. 문제는 내가 스크랩을하고 있고 $ var에 포함 된 것을 편집 할 수 없다는 것입니다. 어떤 해결책? –

답변

2

당신은 첫 번째 경기는 false로 평가 0의 결과로, '왼쪽'과 일치하는 첫 번째 줄에 while (strpos($data, $tag_inizio, $i) !== false)

에 변경해야합니다.

+0

그것은 작동합니다. 문제를 설명해 주시겠습니까? 나는 그것을 잡지 못했다 –

+0

strpos ($ data, $ tag_inizio, $ i)는 텍스트가 첫 줄에 있었으므로 0을 반환합니다. 이것은 while 루프가 0을 false로 보는 것을 멈추게합니다. ! == false를 추가하면 0이 false로 표시되지 않음을 의미합니다. 여기에 더 자세한 예제가 있습니다 : http://php.net/manual/en/function.strpos.php. 희망이 도움이됩니다. – Phright

+0

고마워요. 명확한. –