【问题标题】:str_replace, replacing word with div causes break in p tagstr_replace,用 div 替换 word 导致 p 标签中断
【发布时间】:2012-11-13 14:23:45
【问题描述】:

下面的代码在 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);

为什么 str_replace 会像这样破坏&lt;p&gt; 标签?

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

如果它不能在 PHP 中修复,我们可以用 jQuery 修复它吗? 我想把那个被切断的词放回去,在这种情况下是“关闭”。进入链接后关闭的&lt;p&gt; 标记。最后还要去掉空的&lt;p&gt;标签。

【问题讨论】:

  • 这是适当的行为。问题是,您希望最终结果是什么?
  • 你为什么要在明显是 DOMDocument 上用 str_replace'ing
  • @EliasVanOotegem:显然不是,他在做服务器端 PHP。
  • 如果您的 div 需要成为 div,请将其附加到文档的末尾并绝对定位。如果没有,请改用 span 并在需要时使用 CSS 将其设为 display:block

标签: php jquery wordpress str-replace


【解决方案1】:

p elements 包含phrasing contentdiv 在短语内容中无效,在 flow content 中有效。 (将div 放在p 中就像将p 放在p 中一样。)所以浏览器正在充分利用无效标记。

尝试使用span 而不是div

【讨论】:

  • 谢谢,我从这里复制了标记。 jquerymobile.com/demos/1.2.0/docs/pages/popup/index.html
  • @halliewuud:该标记在div 内有一个p。这是有效的,div 可以包含pdiv 的内容是流内容)。您的标记正试图以相反的方式进行。
  • @TJ 那是因为 str_replace 正在替换

    标记内的单词。而我粘贴的代码是由jquery mobile生成的。

  • @halliewuud:我在您链接的 jQuery 移动设备中没有看到任何试图将 div 放入 p 的内容。对于你正在做的事情,而不是他们正在做的事情,span 更合适。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
相关资源
最近更新 更多