将文本分成两半,但是在最近的句子中

时间:2012-05-08 02:38:15

标签: php html string

$ text变量的示例:

  

Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do   eiusmod tempor incididunt ut labore et dolore magna aliqua。 Ut enim ad   微小的veniam,quis nostrud exercitation ullamco laboris nisi ut   aliquip ex ea commodo consequat。 Duis aute irure dolor in   代表性的velitate velit esse cillum dolore eu fugiat nulla   pariatur。 Excepteur sint occaecat cupidatat non proident,sunt in   culpa qui officia deserunt mollit anim id est laborum。

将它分成两半:

$half = strlen($text) / 2;

会让我进入" o" " consequat"中的角色。

如何找到最接近的句子分隔符(点)到文本一半的位置?在这个例子中,它之后是7个字符" o"。

此文本也包含HTML代码。 我想在查找文本的半点时忽略HTML,并忽略html属性中的点等。

3 个答案:

答案 0 :(得分:4)

查看substrstrip_tagsstrpos。在strpos的帮助下,您可以找到下一个点的位置,并使用strip_tags从字符串中删除所有html标记。

$string = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborumt.';
$string = strip_tags($string);
$half = intval(strlen($string)/2);
echo substr($string, 0, strpos($string, '.', $half)+1);

考虑到你必须确保在$half的值之后存在一个点,否则输出将不是你想要的。

也许是这样的?

if (strpos($string, '.', $half) !== false)
    echo substr($string, 0, strpos($string, '.', $half)+1);
else
    echo substr($string, 0, $half) . '...';

答案 1 :(得分:3)

假设你的句子可以以句号结尾的其他字符结束,你可以看一下:

$s = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.';

// find center (rounded down)
$mid = floor(strlen($s) / 2);
// find range of characters from center that are not ?, ! or .
$r = strcspn($s, '.!?', $mid);

// remember to include the punctuation character
echo substr($s, 0, $mid + $r + 1);

您可能需要稍微调整一下,但它应该做得很好。对于更高级的东西,你正在进入NLP(自然语言处理)领域,其中还有PHP库:

http://sourceforge.net/projects/nlp/

答案 2 :(得分:-2)

function abbrevia($str, $maxChars) {    $limit=$maxChars;
    if (strlen($str)<=$maxChars) return $str;
    else while ($str[$limit]!=" " && $str[$limit]!="." && $str[$limit]!=";" && $str[$limit]!="," && $str[$limit]!="!" && $str[$limit]) $limit++;
    return substr($str,0,($limit))."...";
}

你可以修改这个功能