7

$text变量示例:

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。Exceptioneur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est labourum。

把它分成两半:

$half = strlen($text) / 2;

会让我了解o.consequat

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

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

4

3 回答 3

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) . '...';
于 2012-05-08T02:56:07.610 回答
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/

于 2012-05-08T03:24:00.907 回答
-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))."...";
}

你可以修改这个功能

于 2016-06-13T10:43:06.783 回答