3

我正在尝试截断 PHP 中的描述字段,并在适当的位置插入省略号,以便用户可以单击并了解更多信息。所以我从一个字段中检索一些字符:

LEFT(html,340) as descr

然后设置变量...

$desc= $a['descr'];

现在是困难的部分......我想在刺痛中找到最后一个标点符号,然后用'......'替换它们,因为我认为在随机位置打破一个句子会很丑陋。然后,如果句子太长且没有标点符号,或者结果太短,我实际上会从末尾开始替换第一个找到的空格。

$desc1=preg_replace('/([\.\-_,:].*)$/','...',$desc);

    $desc=strlen(strlen($desc1)>170&&340>strlen($desc1))?$descr1:
        preg_replace('/(\s.*)$/','...',substr($desc,0,300));

这是我到目前为止所尝试的,但问题是它在完全随机的位置打破了字符串,而不是从最后一个标点符号的位置开始。嗯

当几个标点符号一起被发现时,它也是无能为力的。最后,我只想在破折号前面有空格时才替换破折号。但我似乎无法弄清楚如何做这些事情,我的意思是如何把它们放在一起......

如果您能就上述任何一点提出建议,我会很高兴。

嗯,我就是这样解决的

$desc1 = preg_replace('/[.,!:_]+[^.,!:_]*$/', '... ', $desc);
    $desc=(strlen($desc1)<170)?preg_replace('/[\s]+[^\s]*$/', '... ', $desc) : $desc1;
4

1 回答 1

0

这是我的解决方案:

<?php

define("STR_LEN_THRESHOLD", 400); //Define the threshold in characters.

$punctuation = ".,!:_"; //Define punctuation marks
$string = "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus";
while (strlen($string) > STR_LEN_THRESHOLD) { //While string is too long
    $string = preg_replace("/[$punctuation][^$punctuation]+$/", "", $string); //Remove the last sentence
}
echo $string . "..."; //After enough was removed, add ...

这输出:

Pellentesque 居民 morbi tristique senectus et netus et malesuada 名声 ac turpis egestas。Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante。Donec eu libero 坐在amet quam egestas semper。Aenean ultricies mi vitae est. Mauris placerat eleifend leo。Quisque sat amet est et sapien ullamcorper pharetra。Vestibulum erat wisi, condimentum sed, commodo vitae...

于 2012-06-07T19:16:46.417 回答