在这么多单词之后拆分html字符串

时间:2010-06-10 09:46:20

标签: php

我有一个字符串,如果它比10个单词长,我想把它分成两部分。第二部分将包含在其他地方 - 在“更多”链接之后。

该字符串也会包含html标签。 例如,字符串可以是:

<p>This is just a test string with more words than the <strong>amount allow</strong> before split, blah blah blah</p>

所以在我想要的情况下:

$string[0] // <p>This is just a test string with more words than</p>;
$string[1] // <p>the <strong>amount allow</strong> before split, blah blah blah</p>;

提前致谢

2 个答案:

答案 0 :(得分:2)

好吧,我遇到了同样的问题。我解决了这个问题,让我的新闻撰稿人允许使用“[intro] ... [/ intro]” - 他们文本中的标签。然后我用正则表达式解析标签。

如果切割应该在不使用特殊标签的情况下自动完成,那就更难了。您可以使用substr() - 函数。但是你会遇到html标签的问题。因此,我会用以下内容剪切它们:substr(strip_tags($text), 0, 50)。这将允许显示50个字符,不包括html标签。

也许这可以帮助你:)

答案 1 :(得分:0)

这不是微不足道的,但这是一个想法:

  • 逐字逐句地遍历字符串
  • 至少保留以下状态变量:
    • $inTag - 您是否在标签内
    • $inAttribute - 您是否在标记属性中(“&gt;”不会结束标记)
    • $currentTagSoFar - 当前代码的所有字符。从“s”开始,然后是“st”,“str”等,直到“强”
    • $openedTags - 堆叠变量放置当前打开的标签(当您找到开始标签时按下,当您找到结束标签时弹出)
    • $wordsSoFar - 到目前为止您找到的字数
    • 也许$insideComment,取决于你想要的透彻程度
  • 当达到目标字数时,从堆栈中弹出标记并将重新结束的标记添加到字符串中。