0

我正在尝试使用 PHP 限制从字符串返回的字符数。

我应用了一个似乎使服务器崩溃的解决方案(高负载/无限循环),所以我要求替代方案。

我正在尝试找到一种解决方案,可以切割字符串并显示特定数量的字符,但仍然尊重句子的含义,即它不会在单词中间进行切割

我的函数调用如下:

<?php
uc_textcut(get_the_title());
?>

在我的functions.php中,这是我使用的代码(它确实崩溃了):

function uc_textcut($var) {

     $position = 60;
     $result = substr($var,$position,1);

     if ($result !=" ") {
         while($result !=" ") {
            $i = 1;
            $position = $position+$i;
            $result = substr($var,$position,1);
         }
     }

     $result = substr($var,0,$position);
     echo $result;
     echo "...";

}

我的问题是$position = 60.

这个数字越高,它需要的负载就越多——就像它做一个非常慢的循环一样。

我想 有什么问题while(),但我试图让访问者仍然可以理解它,再次,而不是插入单词中间。

有输入吗?

:) 非常感谢你们

4

5 回答 5

4

如果你只想剪切字符串,而不是在单词中间进行,你可以考虑使用该wordwrap函数。

它将返回一个字符串,其中行由换行符分隔;因此,您必须使用 \n 作为分隔符来分解该字符串,并获取返回数组的第一个元素。


有关更多信息和/或示例和/或其他解决方案,请参阅,例如:

于 2009-08-12T22:47:05.597 回答
0
    $cutoff = 25;
    if ($i < $cutoff)
    {
        echo $str;
    }
    else
    {
        // look for a space
        $lastSpace = strrchr(substr($str,0,$cutoff)," ");
        echo substr($str,0,$lastspace);
        echo "...";
    }
于 2009-08-12T22:44:41.637 回答
0

这将在 60 个字符或 60 个字符后的第一个空格处截断,与您的初始代码相同,但效率更高:

$position = 60;
if(substr($var,$position,1) == " ") $position = strpos($var," ",$position);

if($position == FALSE) $result = $var;
else $result = substr($var,0,$position);
于 2009-08-12T22:47:54.283 回答
0
$matches = array();
preg_match('/(^.{60,}?) /', $text, $matches);
print_r($matches[1]);

然后,如果需要,您必须添加省略号。

于 2009-08-12T22:51:18.787 回答
0
<?php

// same as phantombrain's but in a function
function uc_textcut($text) {
    $matches = array();
    preg_match('/(^.{60,}?) /', $text, $matches);
    if (isset($matches[1])) {
        echo $matches[1] . "...";
    } else {
        echo $text;
    }
}


// test it
$textLong = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed tempus dui non sapien ullamcorper vel tincidunt nisi cursus. Vestibulum ultrices pharetra justo id varius.';
$textShort = 'Lorem ipsum dolor sit amet.';

uc_textcut($textLong);
echo "\n";
uc_textcut($textShort);

?>

印刷:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed...
Lorem ipsum dolor sit amet.
于 2009-08-12T23:02:40.510 回答