我正在尝试在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));
这是我到目前为止所尝试的,但问题是它在完全随机的位置打破了字符串,但不是从最后一个标点符号的位置。嗯
当一起找到几个标点符号时,它也无能为力。 最后,我只想在它们前面有一个空格时替换破折号。 但我似乎无法弄清楚如何做这些事情,我的意思是如何把它们放在一起......
如果你能就以上任何一点提出建议,我会很高兴。
Aight,这就是我解决它的方式
$desc1 = preg_replace('/[.,!:_]+[^.,!:_]*$/', '... ', $desc);
$desc=(strlen($desc1)<170)?preg_replace('/[\s]+[^\s]*$/', '... ', $desc) : $desc1;
答案 0 :(得分: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 fames 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坐在amet est et sapien ullamcorper pharetra。 Vestibulum erat wisi,condimentum sed,commodo vitae ......