199

我有一个用 PHP 编写的代码片段,它从数据库中提取一段文本并将其发送到网页上的小部件。原始文本块可以是一篇冗长的文章,也可以是一两句话;但是对于这个小部件,我不能显示超过 200 个字符。我可以使用 substr() 在 200 个字符处截断文本,但结果会在单词中间截断——我真正想要的是在最后一个单词末尾截断200 个字符之前的文本。

4

31 回答 31

237

通过使用自动换行功能。它将文本拆分为多行,以使最大宽度为您指定的宽度,并在单词边界处中断。拆分后,你只需取第一行:

substr($string, 0, strpos(wordwrap($string, $your_desired_width), "\n"));

这个 oneliner 无法处理的一件事是文本本身短于所需宽度的情况。要处理这种极端情况,应该执行以下操作:

if (strlen($string) > $your_desired_width) 
{
    $string = wordwrap($string, $your_desired_width);
    $string = substr($string, 0, strpos($string, "\n"));
}

如果文本在实际剪切点之前包含换行符,则上述解决方案存在过早剪切文本的问题。这是解决此问题的版本:

function tokenTruncate($string, $your_desired_width) {
  $parts = preg_split('/([\s\n\r]+)/', $string, null, PREG_SPLIT_DELIM_CAPTURE);
  $parts_count = count($parts);

  $length = 0;
  $last_part = 0;
  for (; $last_part < $parts_count; ++$last_part) {
    $length += strlen($parts[$last_part]);
    if ($length > $your_desired_width) { break; }
  }

  return implode(array_slice($parts, 0, $last_part));
}

此外,这里是用于测试实现的 PHPUnit 测试类:

class TokenTruncateTest extends PHPUnit_Framework_TestCase {
  public function testBasic() {
    $this->assertEquals("1 3 5 7 9 ",
      tokenTruncate("1 3 5 7 9 11 14", 10));
  }

  public function testEmptyString() {
    $this->assertEquals("",
      tokenTruncate("", 10));
  }

  public function testShortString() {
    $this->assertEquals("1 3",
      tokenTruncate("1 3", 10));
  }

  public function testStringTooLong() {
    $this->assertEquals("",
      tokenTruncate("toooooooooooolooooong", 10));
  }

  public function testContainingNewline() {
    $this->assertEquals("1 3\n5 7 9 ",
      tokenTruncate("1 3\n5 7 9 11 14", 10));
  }
}

编辑 :

不处理像“à”这样的特殊 UTF8 字符。在 REGEX 末尾添加 'u' 来处理它:

$parts = preg_split('/([\s\n\r]+)/u', $string, null, PREG_SPLIT_DELIM_CAPTURE);

于 2008-09-17T04:27:34.970 回答
144

这将返回单词的前 200 个字符:

preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, 201));
于 2008-09-17T04:41:34.390 回答
50
$WidgetText = substr($string, 0, strrpos(substr($string, 0, 200), ' '));

你就拥有了它——一种将任何字符串截断为最接近的整个单词的可靠方法,同时保持在最大字符串长度以下。

我已经尝试了上面的其他示例,但它们没有产生预期的结果。

于 2011-01-12T04:29:50.643 回答
40

当我注意到wordwrap函数的 $break 参数时,以下解决方案诞生了:

字符串自动换行(字符串 $str [, int $width = 75 [, string $break = "\n" [, bool $cut = false ]]] )

这是解决方案

/**
 * Truncates the given string at the specified length.
 *
 * @param string $str The input string.
 * @param int $width The number of chars at which the string will be truncated.
 * @return string
 */
function truncate($str, $width) {
    return strtok(wordwrap($str, $width, "...\n"), "\n");
}

示例#1。

print truncate("This is very long string with many chars.", 25);

上面的示例将输出:

This is very long string...

示例#2。

print truncate("This is short string.", 25);

上面的示例将输出:

This is short string.
于 2013-07-25T08:10:31.117 回答
9

请记住,当您在某些语言(例如中文和日语)不使用空格字符来分割单词的任何地方使用“单词”进行分割时。此外,恶意用户可以简单地输入不带任何空格的文本,或者使用与标准空格字符相似的 Unicode,在这种情况下,您使用的任何解决方案都可能最终显示整个文本。解决此问题的一种方法可能是在正常拆分空格后检查字符串长度,然后,如果字符串仍高于异常限制 - 在这种情况下可能为 225 个字符 - 继续并在该限制下将其愚蠢地拆分。

当涉及到非 ASCII 字符时,还要注意这样的事情;包含它们的字符串可能会被 PHP 的标准 strlen() 解释为比实际更长,因为单个字符可能占用两个或多个字节,而不仅仅是一个。如果你只是使用 strlen()/substr() 函数来分割字符串,你可能会在一个字符的中间分割一个字符串!如有疑问,mb_strlen() / mb_substr()会更简单一些。

于 2008-09-17T06:08:57.707 回答
8

使用 strpos 和 substr:

<?php

$longString = "I have a code snippet written in PHP that pulls a block of text.";
$truncated = substr($longString,0,strpos($longString,' ',30));

echo $truncated;

这将为您提供一个在 30 个字符后的第一个空格处截断的字符串。

于 2008-09-17T04:29:46.603 回答
7

干得好:

function neat_trim($str, $n, $delim='…') {
   $len = strlen($str);
   if ($len > $n) {
       preg_match('/(.{' . $n . '}.*?)\b/', $str, $matches);
       return rtrim($matches[1]) . $delim;
   }
   else {
       return $str;
   }
}
于 2008-09-17T04:31:26.867 回答
5

这是我基于@Cd-MaN 方法的函数。

function shorten($string, $width) {
  if(strlen($string) > $width) {
    $string = wordwrap($string, $width);
    $string = substr($string, 0, strpos($string, "\n"));
  }

  return $string;
}
于 2010-03-26T12:36:03.183 回答
5
$shorttext = preg_replace('/^([\s\S]{1,200})[\s]+?[\s\S]+/', '$1', $fulltext);

描述:

  • ^- 从字符串的开头开始
  • ([\s\S]{1,200})- 获得 1 到 200 个任意字符
  • [\s]+?- 短文本末尾不包含空格,这样我们可以避免word ...而不是word...
  • [\s\S]+- 匹配所有其他内容

测试:

  1. regex101.com让我们添加or一些其他的r
  2. regex101.com orrrr正好 200 个字符。
  3. regex101.com第五后r orrrrr排除。

享受。

于 2014-07-03T15:04:13.963 回答
4

令人惊讶的是,要找到这个问题的完美解决方案是多么棘手。我还没有在此页面上找到至少在某些情况下不会失败的答案(特别是如果字符串包含换行符或制表符,或者如果单词 break 不是空格,或者如果字符串具有 UTF- 8 个多字节字符)。

这是一个适用于所有情况的简单解决方案。这里有类似的答案,但是如果您希望它与多行输入一起使用,“s”修饰符很重要,并且“u”修饰符可以正确评估 UTF-8 多字节字符。

function wholeWordTruncate($s, $characterCount) 
{
    if (preg_match("/^.{1,$characterCount}\b/su", $s, $match)) return $match[0];
    return $s;
}

一个可能的边缘情况......如果字符串在前 $characterCount 个字符中根本没有任何空格,它将返回整个字符串。如果您更喜欢它强制在 $characterCount 处中断,即使它不是单词边界,您也可以使用它:

function wholeWordTruncate($s, $characterCount) 
{
    if (preg_match("/^.{1,$characterCount}\b/su", $s, $match)) return $match[0];
    return mb_substr($return, 0, $characterCount);
}

最后一个选项,如果你想让它在截断字符串时添加省略号......

function wholeWordTruncate($s, $characterCount, $addEllipsis = ' …') 
{
    $return = $s;
    if (preg_match("/^.{1,$characterCount}\b/su", $s, $match)) 
        $return = $match[0];
    else
        $return = mb_substr($return, 0, $characterCount);
    if (strlen($s) > strlen($return)) $return .= $addEllipsis;
    return $return;
}
于 2015-09-01T20:55:28.570 回答
2

我会使用 preg_match 函数来执行此操作,因为您想要的是一个非常简单的表达式。

$matches = array();
$result = preg_match("/^(.{1,199})[\s]/i", $text, $matches);

该表达式的意思是“匹配任何以空格结尾的长度为 1-200 的子字符串”。结果在 $result 中,匹配在 $matches 中。这可以解决您最初的问题,该问题专门以任何空间结尾。如果要使其以换行符结尾,请将正则表达式更改为:

$result = preg_match("/^(.{1,199})[\n]/i", $text, $matches);
于 2008-09-17T04:33:57.420 回答
2

好的,所以我根据上述答案得到了另一个版本,但考虑到了更多的东西(utf-8、\n 和   ;),如果与 wp.

function neatest_trim($content, $chars) 
  if (strlen($content) > $chars) 
  {
    $content = str_replace('&nbsp;', ' ', $content);
    $content = str_replace("\n", '', $content);
    // use with wordpress    
    //$content = strip_tags(strip_shortcodes(trim($content)));
    $content = strip_tags(trim($content));
    $content = preg_replace('/\s+?(\S+)?$/', '', mb_substr($content, 0, $chars));

    $content = trim($content) . '...';
    return $content;
  }
于 2011-10-26T14:37:56.980 回答
2

这是对 mattmac 的回答的一个小修复:

preg_replace('/\s+?(\S+)?$/', '', substr($string . ' ', 0, 201));

唯一的区别是在 $string 的末尾添加一个空格。这确保了最后一个词不会按照 ReX357 的评论被截断。

我没有足够的代表点将其添加为评论。

于 2011-11-09T22:29:11.407 回答
2
/*
Cut the string without breaking any words, UTF-8 aware 
* param string $str The text string to split
* param integer $start The start position, defaults to 0
* param integer $words The number of words to extract, defaults to 15
*/
function wordCutString($str, $start = 0, $words = 15 ) {
    $arr = preg_split("/[\s]+/",  $str, $words+1);
    $arr = array_slice($arr, $start, $words);
    return join(' ', $arr);
}

用法:

$input = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna liqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.';
echo wordCutString($input, 0, 10); 

这将输出前 10 个单词。

preg_split函数用于将字符串拆分为子字符串。字符串被分割的边界是使用正则表达式模式指定的。

preg_split函数接受 4 个参数,但现在只有前 3 个与我们相关。

第一个参数 - 模式 第一个参数是正则表达式模式,字符串将沿着该模式进行拆分。在我们的例子中,我们希望跨单词边界分割字符串。因此,我们使用预定义的字符类\s来匹配空格字符,例如空格、制表符、回车和换行。

第二个参数 - 输入字符串 第二个参数是我们要拆分的长文本字符串。

第三个参数——限制 第三个参数指定应该返回的子字符串的数量。如果将限制设置为n, preg_split 将返回一个包含 n 个元素的数组。第一个n-1元素将包含子字符串。最后一个(n th)元素将包含字符串的其余部分。

于 2012-04-05T09:32:56.550 回答
2

你可以使用这个:

function word_shortener($text, $words=10, $sp='...'){

  $all = explode(' ', $text);
  $str = '';
  $count = 1;

  foreach($all as $key){
    $str .= $key . ($count >= $words ? '' : ' ');
    $count++;
    if($count > $words){
      break;
    }
  }

  return $str . (count($all) <= $words ? '' : $sp);

}

例子:

word_shortener("Hello world, this is a text", 3); // Hello world, this...
word_shortener("Hello world, this is a text", 3, ''); // Hello world, this
word_shortener("Hello world, this is a text", 3, '[read more]'); // Hello world, this[read more]
于 2021-03-10T06:27:18.107 回答
1

基于@Justin Poliey 的正则表达式:

// Trim very long text to 120 characters. Add an ellipsis if the text is trimmed.
if(strlen($very_long_text) > 120) {
  $matches = array();
  preg_match("/^(.{1,120})[\s]/i", $very_long_text, $matches);
  $trimmed_text = $matches[0]. '...';
}
于 2010-12-09T16:28:08.740 回答
1

我有一个功能几乎可以满足您的需求,如果您进行一些编辑,它将完全适合:

<?php
function stripByWords($string,$length,$delimiter = '<br>') {
    $words_array = explode(" ",$string);
    $strlen = 0;
    $return = '';
    foreach($words_array as $word) {
        $strlen += mb_strlen($word,'utf8');
        $return .= $word." ";
        if($strlen >= $length) {
            $strlen = 0;
            $return .= $delimiter;
        }
    }
    return $return;
}
?>
于 2014-06-13T11:37:05.113 回答
1

我就是这样做的:

$string = "I appreciate your service & idea to provide the branded toys at a fair rent price. This is really a wonderful to watch the kid not just playing with variety of toys but learning faster compare to the other kids who are not using the BooksandBeyond service. We wish you all the best";

print_r(substr($string, 0, strpos(wordwrap($string, 250), "\n")));
于 2014-12-11T10:33:32.263 回答
1

虽然这是一个相当老的问题,但我想我会提供一个替代方案,因为它没有被提及并且对 PHP 4.3+ 有效。

通过使用精度修饰符,您可以使用sprintf函数族来截断文本 。%.ℕs

一个句.点后跟一个整数,其含义取决于说明符:

  • 对于 e、E、f 和 F 说明符:这是要在小数点后打印的位数(默认为 6)。
  • 对于 g 和 G 说明符:这是要打印的有效数字的最大数量。
  • 对于 s 说明符:它充当截止点,为字符串设置最大字符限制

简单截断https://3v4l.org/QJDJU

$string = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var_dump(sprintf('%.10s', $string));

结果

string(10) "0123456789"

扩展截断https://3v4l.org/FCD21

由于sprintf功能类似于substr并且将部分切断单词。以下方法将通过使用strpos(wordwrap(..., '[break]'), '[break]')特殊分隔符来确保单词不会被截断。这使我们能够检索位置并确保我们不匹配标准句子结构。

返回一个字符串而不部分切断单词并且不超过指定的宽度,同时如果需要保留换行符。

function truncate($string, $width, $on = '[break]') {
    if (strlen($string) > $width && false !== ($p = strpos(wordwrap($string, $width, $on), $on))) {
        $string = sprintf('%.'. $p . 's', $string);
    }
    return $string;
}
var_dump(truncate('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', 20));

var_dump(truncate("Lorem Ipsum is simply dummy text of the printing and typesetting industry.", 20));

var_dump(truncate("Lorem Ipsum\nis simply dummy text of the printing and typesetting industry.", 20));

结果

/* 
string(36) "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"  
string(14) "Lorem Ipsum is" 
string(14) "Lorem Ipsum
is" 
*/

结果使用wordwrap($string, $width)strtok(wordwrap($string, $width), "\n")

/*
string(14) "Lorem Ipsum is"
string(11) "Lorem Ipsum"
*/
于 2020-04-03T23:50:50.007 回答
1
// a looonnng string ...
$str = "Le Lorem Ipsum est simplement du 
faux texte employé dans la composition et 
la mise en page avant impression. 
Le Lorem Ipsum est le faux texte standard de 
l'imprimerie depuis les années 1500, quand un 
imprimeur anonyme assembla ensemble des morceaux 
de texte pour réaliser un livre spécimen de polices
de texte. Il n'a pas fait que survivre cinq siècles,
mais s'est aussi adapté à la bureautique informatique,
sans que son contenu n'en soit modifié. Il a été 
popularisé dans les années 1960 grâce à la vente 
de feuilles Letraset contenant des passages du
Lorem Ipsum, et, plus récemment, par son inclusion 
dans des applications de mise en page de texte, 
comme Aldus PageMaker";
// number chars to cut
$number_to_cut = 300;
// string truncated in one line !
$truncated_string = 
substr($str, 0, strrpos(substr($str, 0, $number_to_cut), ' '));
// test return
echo $truncated_string;

// variation (add ellipsis) : echo $truncated_string.' ...';

// output :
/* Le Lorem Ipsum est simplement du 
faux texte employé dans la composition et 
la mise en page avant impression. 
Le Lorem Ipsum est le faux texte standard de 
l'imprimerie depuis les années 1500, quand un 
imprimeur anonyme assembla ensemble des morceaux 
de texte pour réaliser un livre
*/
于 2020-12-02T03:42:07.257 回答
0

我知道这是旧的,但是...

function _truncate($str, $limit) {
    if(strlen($str) < $limit)
        return $str;
    $uid = uniqid();
    return array_shift(explode($uid, wordwrap($str, $limit, $uid)));
}
于 2013-02-26T12:48:07.903 回答
0

我创建了一个更类似于 substr 的函数,并使用了@Dave 的想法。

function substr_full_word($str, $start, $end){
    $pos_ini = ($start == 0) ? $start : stripos(substr($str, $start, $end), ' ') + $start;
    if(strlen($str) > $end){ $pos_end = strrpos(substr($str, 0, ($end + 1)), ' '); } // IF STRING SIZE IS LESSER THAN END
    if(empty($pos_end)){ $pos_end = $end; } // FALLBACK
    return substr($str, $pos_ini, $pos_end);
}

Ps.:全长切割可能小于substr。

于 2015-06-24T15:03:34.273 回答
0

在DaveAmalMurali的代码中添加了 IF/ELSEIF 语句,用于处理不带空格的字符串

if ((strpos($string, ' ') !== false) && (strlen($string) > 200)) { 
    $WidgetText = substr($string, 0, strrpos(substr($string, 0, 200), ' ')); 
} 
elseif (strlen($string) > 200) {
    $WidgetText = substr($string, 0, 200);
}
于 2016-01-28T12:04:21.283 回答
0

我发现这行得通:

function abbreviate_string_to_whole_word($string, $max_length, $buffer) {
    if (strlen($string) > $max_length) {
        $string_cropped = substr($string, 0, $max_length - $buffer);
        $last_space = strrpos($string_cropped, " ");
        if ($last_space > 0) {
            $string_cropped = substr($string_cropped, 0, $last_space);
        }
        $abbreviated_string = $string_cropped . "&nbsp;...";
    }
    else {
        $abbreviated_string = $string;
    }
    return $abbreviated_string;
}

缓冲区允许您调整返回字符串的长度。

于 2018-05-11T11:00:25.630 回答
0

据我所知,这里所有的解决方案都只对起点固定的情况有效。

允许你打开这个:

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna liqua. Ut enim ad minim veniam.

进入这个:

Lorem ipsum dolor sit amet, consectetur...

如果您想截断一组特定关键字周围的单词怎么办?

截断一组特定关键字周围的文本。

目标是能够转换它:

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna liqua. Ut enim ad minim veniam.

进入这个:

...consectetur adipisicing elit, sed do eiusmod tempor...

这是显示搜索结果、摘录等时非常常见的情况。要实现这一点,我们可以结合使用这两种方法:

    /**
     * Return the index of the $haystack matching $needle,
     * or NULL if there is no match.
     *
     * This function is case-insensitive  
     * 
     * @param string $needle
     * @param array $haystack
     * @return false|int
     */
    function regexFindInArray(string $needle, array $haystack): ?int
    {
        for ($i = 0; $i < count($haystack); $i++) {
            if (preg_match('/' . preg_quote($needle) . '/i', $haystack[$i]) === 1) {
                return $i;
            }
        }
        return null;
    }

    /**
     * If the keyword is not present, it returns the maximum number of full 
     * words that the max number of characters provided by $maxLength allow,
     * starting from the left.
     *
     * If the keyword is present, it adds words to both sides of the keyword
     * keeping a balanace between the length of the suffix and the prefix.
     *
     * @param string $text
     * @param string $keyword
     * @param int $maxLength
     * @param string $ellipsis
     * @return string
     */
    function truncateWordSurroundingsByLength(string $text, string $keyword, 
            int $maxLength, string $ellipsis): string
    {
        if (strlen($text) < $maxLength) {
            return $text;
        }

        $pattern = '/' . '^(.*?)\s' .
                   '([^\s]*' . preg_quote($keyword) . '[^\s]*)' .
                   '\s(.*)$' . '/i';
        preg_match($pattern, $text, $matches);

        // break everything into words except the matching keywords, 
        // which can contain spaces
        if (count($matches) == 4) {
            $words = preg_split("/\s+/", $matches[1], -1, PREG_SPLIT_NO_EMPTY);
            $words[] = $matches[2];
            $words = array_merge($words, 
                              preg_split("/\s+/", $matches[3], -1, PREG_SPLIT_NO_EMPTY));
        } else {
            $words = preg_split("/\s+/", $text, -1, PREG_SPLIT_NO_EMPTY);
        }

        // find the index of the matching word
        $firstMatchingWordIndex = regexFindInArray($keyword, $words) ?? 0;

        $length = false;
        $prefixLength = $suffixLength = 0;
        $prefixIndex = $firstMatchingWordIndex - 1;
        $suffixIndex = $firstMatchingWordIndex + 1;

        // Initialize the text with the matching word
        $text = $words[$firstMatchingWordIndex];

        while (($prefixIndex >= 0 or $suffixIndex <= count($words))
                and strlen($text) < $maxLength and strlen($text) !== $length) {
            $length = strlen($text);
            if (isset($words[$prefixIndex])
                and (strlen($text) + strlen($words[$prefixIndex]) <= $maxLength)
                and ($prefixLength <= $suffixLength 
                     or strlen($text) + strlen($words[$suffixIndex]) <= $maxLength)) {
                $prefixLength += strlen($words[$prefixIndex]);
                $text = $words[$prefixIndex] . ' ' . $text;
                $prefixIndex--;
            }
            if (isset($words[$suffixIndex])
                and (strlen($text) + strlen($words[$suffixIndex]) <= $maxLength)
                and ($suffixLength <= $prefixLength 
                     or strlen($text) + strlen($words[$prefixIndex]) <= $maxLength)) {
                $suffixLength += strlen($words[$suffixIndex]);
                $text = $text . ' ' . $words[$suffixIndex];
                $suffixIndex++;
            }
        }

        if ($prefixIndex > 0) {
            $text = $ellipsis . ' ' . $text;
        }
        if ($suffixIndex < count($words)) {
            $text = $text . ' ' . $ellipsis;
        }

        return $text;
    }

现在你可以这样做:

$text = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do' .
        'iusmod tempor incididunt ut labore et dolore magna liqua. Ut enim' .
        'ad minim veniam.';

$text = truncateWordSurroundingsByLength($text, 'elit', 25, '...');

var_dump($text); // string(32) "... adipisicing elit, sed do ..."

运行代码

于 2021-10-11T20:24:52.883 回答
0
function trunc($phrase, $max_words) {
       $phrase_array = explode(' ',$phrase);
       if(count($phrase_array) > $max_words && $max_words > 0)
          $phrase = implode(' ',array_slice($phrase_array, 0, $max_words)).'...';
       return $phrase;
    }
于 2021-12-18T18:51:10.433 回答
-1

我以前用过这个

<?php
    $your_desired_width = 200;
    $string = $var->content;
    if (strlen($string) > $your_desired_width) {
        $string = wordwrap($string, $your_desired_width);
        $string = substr($string, 0, strpos($string, "\n")) . " More...";
    }
    echo $string;
?>
于 2014-02-09T13:24:07.727 回答
-1

我相信这是最简单的方法:

$lines = explode('♦♣♠',wordwrap($string, $length, '♦♣♠'));
$newstring = $lines[0] . ' &bull; &bull; &bull;';

我正在使用特殊字符来分割文本并剪切它。

于 2018-03-09T13:26:34.837 回答
-1

用这个:

以下代码将删除“,”。如果您有任何其他字符或子字符串,您可以使用它来代替 ','

substr($string, 0, strrpos(substr($string, 0, $comparingLength), ','))

// 如果你有另一个字符串帐户

substr($string, 0, strrpos(substr($string, 0, $comparingLength-strlen($currentString)), ','))
于 2018-12-22T09:01:22.303 回答
-2

可能这会帮助某人:

<?php

    $string = "Your line of text";
    $spl = preg_match("/([, \.\d\-''\"\"_()]*\w+[, \.\d\-''\"\"_()]*){50}/", $string, $matches);
    if (isset($matches[0])) {
        $matches[0] .= "...";
        echo "<br />" . $matches[0];
    } else {
        echo "<br />" . $string;
    }

?>
于 2014-04-01T10:32:13.767 回答
-2

在这里你可以试试这个

substr( $str, 0, strpos($str, ' ', 200) ); 
于 2015-08-26T12:46:05.160 回答