如果像ucfirst()这样的PHP函数会忽略html?
我正在以编程方式清理评论和其他用户提交的内容中的一些基本语法.资本化I,句子的第一个字母等.评论和内容与
HTML混合,因为用户在格式化文本时有一些选项.
事实证明这比预期更有挑战性,特别是对PHP和regex的新手来说. 如果像ucfirst这样的函数会忽略html以帮助大写句子? 此外,任何关于清理html文本的链接或教程,将不胜感激.请留下您认为有助于评论的任何内容.谢谢! 编辑: <div><p>i wuz walkin thru the PaRK and found <strong>ur dog</strong>. <br />i hoPe to get a reward.<br /> plz call or text 7zero4 8two8 49 sevenseven</div> 我需要它(最终) <div><p>I was walking through the park and found <strong>your dog<strong>. <p>I hope to get a reward.</p><p> Please call or text (704) 828-4977.</p> 我知道这比预期的问题要远一点,但我的想法是逐步做到这一点. ucfirst()只是我每次扫描一次做一次小清理的众多函数之一.即使我不得不通过过滤器运行100次文本,当网站没有流量时,它也会在cron运行时运行.我希望有一个讨论论坛,这可以继续,因为显然会有一些关于继续这种方法的好主意.关于如何通过各种方式将其作为整体项目的任何想法请发表评论. 我想这个问题本身的精神.因此,ucfirst不会是最好的函数,因为它不能忽略事物的参数列表.一个标志IGNORE_HTML会很棒! 鉴于这是一个PHP问题,那么下面推荐的DOM解析器听起来像是最好的答案?思考? 解决方法
您应该使用DOM解析器(
the built-in one或
this one,这非常容易使用).
遍历HTML中的所有文本节点,并使用preg_replace_callback,ucfirst和类似这样的正则表达式执行清理: '/(s*)([^.?!]*)/' 这将匹配一个空格字符串,然后匹配尽可能多的非句子结尾标点字符.然后在第一个捕获组中找到实际的句子(以字母开头,除非你的句子以“,这使事情复杂化”). 但是从你的问题来看,我认为你已经做了类似后者的事情,而你的代码只是窒息HTML标签.下面是一些示例代码,用于获取我链接的第二个DOM解析器的所有文本节点: require 'simple_html_dom.php'; $html = new simple_html_dom(); $html->load($fullHtmlStr); foreach($html->find('text') as $textNode) $textNode = cleanupFunction($textNode); $cleanedHtmlStr = $html->save(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |