21

たとえば、最初の25文字などに制限したい2つの文字列があります。25番目の文字の後のテキストを切り取り、文字列の最後に...を追加する方法はありますか?

したがって、「12345678901234567890abcdefg」は「12345678901234567890abcde ...」に変わり、「fg」は切り捨てられます。

4

11 に答える 11

50

pallanのコードを変更できますか?

$truncated = (strlen($string) > 20) ? substr($string, 0, 20) . '...' : $string;

短い場合、これは「...」を追加しません。

于 2009-08-06T20:33:59.470 に答える
10

単語の途中で途切れるのを避けるために、wordwrap関数を試してみることをお勧めします; このような何かができると思います:

$str = "this is a long string that should be cut in the middle of the first 'that'";
$wrapped = wordwrap($str, 25);
var_dump($wrapped);

$lines = explode("\n", $wrapped);
var_dump($lines);

$new_str = $lines[0] . '...';
var_dump($new_str);

$wrapped含まれます:

string 'this is a long string
that should be cut in the
middle of the first
'that'' (length=74)

$lines配列は次のようになります:

array
  0 => string 'this is a long string' (length=21)
  1 => string 'that should be cut in the' (length=25)
  2 => string 'middle of the first' (length=19)
  3 => string ''that'' (length=6)

そして最後に、あなたの$new_string

string 'this is a long string' (length=21)


次のように、substrを使用します。

var_dump(substr($str, 0, 25) . '...');

あなたは得たでしょう:

string 'this is a long string tha...' (length=28)

見栄えがよくない:-(


それでも、楽しんでください!

于 2009-08-06T20:38:24.843 に答える
9

本当に早く、

$truncated = substr('12345678901234567890abcdefg', 0, 20) . '...'
于 2009-08-06T20:31:02.423 に答える
8

これは短く、単語の境界を考慮に入れており、ループを使用しないため、非常に効率的です。

function truncate($str, $chars, $end = '...') {
    if (strlen($str) <= $chars) return $str;
    $new = substr($str, 0, $chars + 1);
    return substr($new, 0, strrpos($new, ' ')) . $end;
}

使用法:

truncate('My string', 5); //returns: My...
于 2015-07-17T10:53:32.977 に答える
6

http://php.net/manual/en/function.mb-strimwidth.php(PHP 4> = 4.0.6、PHP 5、PHP 7)

<?php
echo mb_strimwidth("Hello World", 0, 10, "...");
echo "<br />";
echo mb_strimwidth("Hello", 0, 10, "...");
?>

出力:

Hello W...
Hello
于 2017-01-14T14:41:53.003 に答える
2
$words=explode(' ', $string);
for($ii = 0,$j=0; $ii< 5 && $j < sizeof($words) ;$j++){
    $ii += strlen($words[$j]);
    $intro= $words[$j]. " ";    
}
$intro.= "...";

遅くなることはわかっていますが、他の誰かがこのページに戻ってきたら、これで十分です。

于 2010-12-29T06:54:54.583 に答える
1

substr関数はあなたにぴったりです

于 2009-08-06T20:30:48.400 に答える
1

substrメソッドを探しています。

$s = substr($input, 0, 25);

これにより、弦の最初のチャックが得られ、最後に好きなものを追加できます。

于 2009-08-06T20:31:33.157 に答える
1

いくつかの追加の改善を加えて、PascalMARTINの答えを使用します。なぜなら;

1-「PHPワードラップ」、単語の境界を自動的に尊重します

2-文字列に25文字を超える単語が含まれている場合(ああ、何もする必要はありません)、「PHPワードラップ」に単語を強制的にカットさせることができます。(改善)

3-文字列が25文字より短い場合、「...」は完全な文の後で醜いように見えます。(改善)

$str = "This string might be longer than 25 chars, or might not!";
// we are forcing to cut long words...
$wrapped = wordwrap($str, 25, "\n", 1);
var_dump($wrapped);

$lines = explode("\n", $wrapped);
var_dump($lines);

// if our $str is shorter than 25, there will be no $lines[1]
(array_key_exists('1', $lines)) ? $suffix = '...' : $suffix = '';
$new_str = $lines[0] . $suffix;
var_dump($new_str);
于 2012-02-13T22:18:49.657 に答える
0
<?php echo substr('12345678901234567890abcdefg', 0, 20) . '...' ?>

http://fr.php.net/manual/en/function.substr.php

于 2009-08-06T20:31:22.610 に答える
0
 echo substr($str,0,25)."...";

トリックはできますが、単語を扱っている場合は、単語の境界を切り取って、部分的な単語がないようにすることをお勧めします。

だからそれをするために(私の頭のてっぺんから原油):

$words = split(" ", strlen($str));

for($i = 0,$j=0; $i< 25 && $j < sizeof($words) ;$j++)
{
    $i += strlen($words[$j]);
    echo $words[$j]. " ";    
}
echo "...";
于 2009-08-06T20:32:17.787 に答える