0

我在 PHP 中工作。

我有一些来自网页/html 文件的文本,它已经通过可读性/简化过程,现在我想将其拆分为不超过一定字符数的短语/消息。

目前:我从整页开始,除了段落标签之外,我剥离标签,我用任何东西替换段落结束标签

这给出了一个段落数组。

对于比允许的最大允许长度更长的每个段落,我将其分解为 '. '。

给出一系列句子。

对于每个超过最大允许长度的句子,我会在“.”上爆炸。(没有空间......对于懒惰的人)。

对于超过最大允许长度的每一个,我会在最大长度内查找最后一个 ' ' 并对此进行拆分。

如果任何文本仍然太长,则将其分块到最大长度。

这一切都是非常连续和循环的,并且可以作为单个消息单独发送的多个短句 - 我相信这可以通过几个正则表达式做得更好。

编辑

This is what I have ended up with:

function phraseify($text,$maxlen) {
    $text = strip_tags($text,'<p>');
    $srch= array ('/&lsquo;/u', '/&rsquo;/u', '/&ldquo;/u', '/&rdquo;/u', '/&mdash;/u');
    $repl= array ('\'','\'','"','"','-');
    $text = preg_replace($srch,$repl,$text);
    $text = html_entity_decode($text,ENT_QUOTES, 'UTF-8');
    $text = str_replace('</p>','',$text);
    $paras = explode('<p>',$text);
    $paras = phraseit($paras,array ('. ',', ','? ','.',',','?','-',' '),$maxlen);
    return $paras;
}

function phraseit($arr,$on,$maxlen) {
    $ret = array();
    foreach ($arr as $str) {
        if (strlen($str)<=$maxlen) {
            array_push($ret,$str);
        } else {
            while (strlen($str)>0) {
                $sub=substr($str,0,$maxlen);
                $pos='';
                for ($i=0; $i<count($on); $i++ ) {
                    $pos=strrpos($sub,$on[$i]);
                    if ($pos!==false) {break; }
                }
                if ($pos===false) {$pos = $maxlen; }
                array_push($ret,substr($str,0,$pos+1));
                $str = substr($str,$pos+1);
            }
        }
    }
    return $ret;
}
4

0 回答 0