0

以下の2番目のコンテンツフラグメントでこのスクリプトを実行すると、通過します(「コールバック内」エコーが発生します)。

ただし、最初のコンテンツフラグメントで実行すると、最初のエコーを取得したとしても、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>
4

2 に答える 2

1

最初のフラグメントには含まれていません<p>...</p>

段落タグには属性があります。

于 2012-01-24T14:57:00.457 に答える
0

s(PCRE_DOTALL)修飾子を使用します。

$replaced_content = preg_replace_callback('#(<p.*?</p>)#s', 'p_callback', $content);
                                                    ____^
于 2012-01-24T15:16:01.403 に答える