我在 PHP 中工作。
我有一些来自网页/html 文件的文本,它已经通过可读性/简化过程,现在我想将其拆分为不超过一定字符数的短语/消息。
目前:我从整页开始,除了段落标签之外,我剥离标签,我用任何东西替换段落结束标签
这给出了一个段落数组。
对于比允许的最大允许长度更长的每个段落,我将其分解为 '. '。
给出一系列句子。
对于每个超过最大允许长度的句子,我会在“.”上爆炸。(没有空间......对于懒惰的人)。
对于超过最大允许长度的每一个,我会在最大长度内查找最后一个 ' ' 并对此进行拆分。
如果任何文本仍然太长,则将其分块到最大长度。
这一切都是非常连续和循环的,并且可以作为单个消息单独发送的多个短句 - 我相信这可以通过几个正则表达式做得更好。
编辑
This is what I have ended up with:
function phraseify($text,$maxlen) {
$text = strip_tags($text,'<p>');
$srch= array ('/‘/u', '/’/u', '/“/u', '/”/u', '/—/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;
}