7

$text変数の例:

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labe 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 office deserunt mollit anim id est labum.

半分に分割します:

$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 に答える