2012-01-24 8 views
0

以下の2番目のコンテンツフラグメントでこのスクリプトを実行すると、「内側コールバック」エコーが発生します。なぜこのpreg_replace_callbackは起動しませんか?

しかし、私が最初のコンテンツフラグメントでそれを実行すると、最初のエコーが得られたと思っても、p_callback()内にエコーが得られることはありません。

私は、コンテンツ内にpreg_replace_callbackを上回るものがあると推測しています。あなたは何が問題を引き起こしていると思いますか?

function ad_insert($content){ 
    if(substr_count(strtolower($content), '</p>') < get_option('ad_insert')) 
    { 
     return $content .= '<p class="endContent">' . get_ads($ad_insert=1) . '</p>'; 
    } 
    else 
    { 
    echo "inside else"; 
    $replaced_content = preg_replace_callback('#(<p>.*?</p>)#', 'p_callback', $content); 
    } 
    return $replaced_content; 
} 

function p_callback($matches) 
{ 
    echo "inside callback";die; 
    static $count = 0; 
    $ret = $matches[1]; 
    $pCount = get_option('cb2_ad_insert'); 

    if (++$count == $pCount){ 
     $ret .= '<p class="insertContent">' . ce4_get_ads($ad_insert=1) . '</p>'; 
    } 

    return $ret; 
} 

まずコンテンツフラグメントは失敗します。

<div style="margin: 10px 0;"> 
    <a href="test.jpg" target="_blank" rel="nofollow"> 
     <img style="float: left; margin: 10px; max-width: 25%;" title="test" src="test.jpg" alt="test" /> 
    </a> 
    <p style="float: left; width: 70%;"> 
     <a href="test" target="_blank" rel="nofollow"> 
      <img title="PDF file" src="test.png" alt="PDF file" /> 
      <span style="font-weight: bold; text-transform: capitalize;">Test ...</span> 
     </a> 
     <span>test <strong>test</strong> test? test, test, i.e., </span> 
     <a href="test.pdf" target="_blank" rel="nofollow"> ... Get Content Here</a> 
    </p> 
</div> 

第2のコンテンツの断片は渡し:

<div style="margin: 10px 0;"> 
    <p>first paragraph</p> 
    <p>second paragraph</p> 
</div> 
+0

のみ過半数近い投票理由が示されている: –

答えて

1

あなたの最初のフラグメントが<p>...</p>

あなたの段落タグが属性を持って含まれていません。

$replaced_content = preg_replace_callback('#(<p.*?</p>)#s', 'p_callback', $content); 
                ____^ 
+0

ありがとう、私は一致正規表現を変更する必要があるように見えます – RegEdit

0

s (PCRE_DOTALL)修飾子を使用してください。この問題は、もはや再現できない問題や簡単な誤字によって引き起こされたものです。類似の質問がここでは話題になるかもしれませんが、これは将来の読者には役立たない方法で解決されました。
関連する問題