str_replace,用div替换word会导致p标记中断

hal*_*uud 0 php wordpress jquery str-replace

下面的代码在WordPress内容中搜索单词,并用链接和div替换这些单词.它会产生一个问题,即div关闭<p>它插入的标签.

$myposts = get_pages(args...);
$replace = array();
$i = 1;

foreach( $myposts as $post ) {
    setup_postdata($post);
    $replace[get_the_title()] = '<a href="#popupBasic' . $i . '" data-rel="popup">' . get_the_title() . '</a><div data-role="popup" class="tooltipBox" id="popupBasic' . $i . '">' . get_the_content() . '</div>';
    $i++;
}

$text = str_replace(array_keys($replace), $replace, $text);
Run Code Online (Sandbox Code Playgroud)

为什么str_replace会<p>像这样打破标签?

<div>
    <p>Some random text thats been <a href="#" class="link">cutt</a></p><div style="display: none;"><!-- placeholder --></div> off.<p></p>
</div>
Run Code Online (Sandbox Code Playgroud)

如果它无法在PHP中修复,我们可以用jQuery解决这个问题吗?我想把那些被切断的词放回去,在这种情况下"关闭".进入<p>链接后关闭的标记.并最后删除空<p>标签.

T.J*_*der 5

p元素包含措辞内容.div在短语内容中无效,它在流内容中有效.(把一个div内部的p,就像把一个p内部的p).所以,浏览器制造最好无效标记.

尝试使用span而不是div.