2012-11-28 3 views
0

strpos을 올바르게 사용하는 데 문제가 있습니다. <br />을 검색하면 찾을 수 있습니다. 사이에 공백이 있거나없이 <br /><br /><br />을 검색하면 htmlspecialchars을 사용하면 문자열이 가득 찼음을 알 수 있습니다.검색하는 동안 PHP strpos가 작동하지 않습니다. <br /><br /> 이후에 nl2br()

<?php 
    $picArray = glob('projectData/' . $data['folder'] . '/*.jpg',GLOB_BRACE); 

    $text = nl2br($data['definition']).'<br />'; 

    $cutP = 0; 
    foreach($picArray AS $insert) { 

     if(strpos($text,'<br /> <br /> <br />',$cutP) !== FALSE){ 
      $cutP = strpos($text,'<br /> <br /> <br />',$cutP)+6; 
      echo $cutP.'_'; 
      $str_to_insert = '<img class="inTextImg" title="int" src="'.$insert.'" />'; 
      $text = substr($text, 0, $cutP) . $str_to_insert . substr($text, $cutP); 
     } 
     else { 
      echo 'haha'; 
      $text .= '<img class="inTextImg" title="outText!" src="'.$insert.'" />'; 
     } 
    } 
    ?> 

아이디어에 감사드립니다.

+0

'echo $ text;'의 출력은 무엇입니까? –

+0

아마도'<'라고 생각하는 것이 실제로는 '<'입니까? – ficuscr

+0

이 문제를 간단한 스크립트로 분해 할 수 있습니까? 귀하의 fodler 구조 등 언급하지 않고 그냥 실패의 예를 들어주세요. 일반적으로 이런 종류의 작업에는 정규식을 사용하는 것이 좋습니다. –

답변

2

nl2br 그냥 '<br />' 후, 장소에 원래의 줄 바꿈 문자를 유지하기 때문입니다으로 확인을 할 것입니다. 검색 할 문자열에 줄 바꿈 문자를 포함시켜야합니다. 이것에 대한 몇 가지 다른 패턴이있을 수 있으므로 일치시키기 위해 정규 표현식을 사용하는 것이 가장 쉽습니다 :

$text = preg_replace('/(?:<br \/>\r?\n?){3}/', $str_to_insert, $text); 
+0

의 위치를 ​​필요로한다. 왜냐하면'strpos'가 문자열과 일치하지 않는 이유를 설명하기 위해서 +1 –

+0

+1이 나와있다. – ficuscr

+0

덕분에
을 그대로 두어 $ text = str_replace ("\ n", '', $ text); $ text = str_replace ("\ r", '', $ text); –

0

preg_match()를 사용해 보셨습니까?

if(preg_match("\(<br />)+\",$text) > 0){ 
    // code 
} 

하지 정규식에 100 %,하지만 당신은 하나 또는 그 이상의 BR 태그