gpt4 book ai didi

php - 拼图 : Splitting An HTML String Correctly

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:34:02 24 4
gpt4 key购买 nike

我正在尝试通过标记拆分 HTML 字符串,以便在不显示完整帖子的情况下创建博客预览。这比我最初想象的要更难。以下是问题:

  • 用户将创建 HTML通过所见即所得的编辑器(CKEditor)。标记不能保证是漂亮或一致。
  • token ,read_more(),可以放置在字符串中的任何位置,包括嵌套在段落标记。
  • 得到的第一个分割字符串必须是对所有人有效的 HTML代币的合理使用。

可能的用途示例:

<p>Some text here. read_more()</p>

<p>Some text read more() here.</p>

<p>read_more()</p>

<p> read_more()</p>

read_more()

到目前为止,我已经尝试过只拆分 token 上的字符串,但它留下了无效的 HTML。正则表达式也许是另一种选择。你会用什么策略来解决这个问题并让它尽可能地防弹?任何代码片段或提示也将不胜感激(我使用的是 PHP)。

最佳答案

function stripmore($in)
{
list($p1,$p2) = explode("read_more()",$in,2);

$pass1 = preg_replace("~>[^<>]+<~","><",$p2);
$pass2 = preg_replace("~^[^<>]+~","",$pass1);

$pass3 = null;
while ( $pass3 != $pass2 )
{
if ( $pass3 !== null ) $pass2 = $pass3;
$pass3 = preg_replace("~<([^<>]+)></\\1>~","",$pass2);
}

return $p1."read_more()".$pass3;
}

这会去除 read_more() 标记之后的任何非 html,并通过去除相应的标签将其减少到最小值,同时保持任何标记在标记之前开始和结束之后:

<p>Some text here. read_more()</p>
==> <p>Some text here. read_more()</p>

<p>Some <b>text</b> read_more() <b>here</b>.</p>
==> <p>Some <b>text</b> read_more()</p>

<p>Some <b>text read_more() here</b>.</p>
==> <p>Some <b>text read_more()</b></p>

关于php - 拼图 : Splitting An HTML String Correctly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3380407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com