【问题标题】:Substr String With HTML In PHPPHP中带有HTML的Substr字符串
【发布时间】:2015-10-28 21:38:52
【问题描述】:

我有一些从我的数据库中返回的文本,如下所示:

<span rgb(61,="" 36,="" 36);="" font-family:="" 'frutiger="" neue="" w01="" book',="" 'helvetica="" neue',="" helvetica,="" arial,="" sans-serif;="" line-height:="" 23.8px;"="">The Department of ...

我用echo html_entity_decode($item->body);来显示:

The Department of ...

但是,如果我在此内容上使用 PHP substr 函数,它永远不会正确显示。它将显示 HTML 的前 x 个字符,而不是 HTML 格式的文本。

这是我尝试过的:echo substr(html_entity_decode($item->body), 0, 5);

但它不显示任何内容。如果我尝试像0, 200); 这样的金额,它将显示:

The Department of Molec

但这绝对不是格式化文本的前 200 个字符,因为第一个字符是 T

我的想法是必须有办法格式化然后 substr,即使我自己无法使用 html_entity_decode()substr() 让它工作。

有人可以帮我吗?谢谢!

【问题讨论】:

  • 向我们展示您对substr 的尝试,以便我们修复它。
  • 但事实并非如此。 0, 1); 应该输出 T。相反,它输出<
  • PHP 不知道 html 是什么。 HTML 只是文本,PHP 会像对待任何其他文本一样对待它。如果您只需要 html sn-p 的文本节点,则由您来提取这些文本 sn-ps。这意味着使用适当的 HTML 感知工具,例如 DOM

标签: php html substring html-entities


【解决方案1】:

尝试使用它来代替 html_entity_decode():

strip_tags($item->body);

strip_tags 从字符串中删除所有 HTML 标记。所以你最好处理字符串,然后用它做点什么。

【讨论】:

    【解决方案2】:

    您将在源代码中看到输出,但它没有被渲染。源代码会显示:

    echo substr(html_entity_decode($item->body), 0, 5);
    // Output: "<span"
    

    您可能想要做的是搜索 html-tag 的结尾,然后显示 5 个字符,例如:

    $text = html_entity_decode($item->body);
    $start = strpos( $text, '>' ) + 1;
    echo substr( $text, $start, 5 );
    

    【讨论】:

    • 显示正确的文本,但是,我的 href 中断了。
    • 那么有一种可怕的方式就是把它读成DOMDocument,通过nodes和nodeValues来解析
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 2021-12-06
    相关资源
    最近更新 更多