Son sözü kesmeden, bir dizeden ilk x karakter almak nasıl?

10 Cevap php

Ben bir değişken aşağıdaki dize var.

Stack Overflow is as frictionless and painless to use as we could make it.

Ben bu yüzden normalde ben kullanırsanız substr o Stack Overflow is as frictio bu çıkışı bana verecek, yukarıdaki hattan ilk 28 karakterleri almak istiyorum ama çıktı olarak istiyorum:

Stack Overflow is as...

Bunu yapmak, ya da PHP bana bunun için kod sağlamak lütfen PHP önceden yapılmış bir işlevi var mı?

Edited:

O güzel, bir kelime bozmadan bana 28 daha az az karakter dönecektir eğer ben, bir kelime bozmadan dize toplam 28 karakter istiyorum.

10 Cevap

Dan AlfaSky:

function addEllipsis($string, $length, $end='…')
{
    if (strlen($string) > $length)
    {
        $length -= strlen($end);
        $string  = substr($string, 0, $length);
        $string .= $end;
    }

    return $string;
}

Bir alternatif, daha özellikli uygulama Elliott Brueggeman's blog:

/**
 * trims text to a space then adds ellipses if desired
 * @param string $input text to trim
 * @param int $length in characters to trim to
 * @param bool $ellipses if ellipses (...) are to be added
 * @param bool $strip_html if html tags are to be stripped
 * @return string 
 */
function trim_text($input, $length, $ellipses = true, $strip_html = true) {
    //strip tags, if desired
    if ($strip_html) {
    	$input = strip_tags($input);
    }

    //no need to trim, already shorter than trim length
    if (strlen($input) <= $length) {
    	return $input;
    }

    //find last space within length
    $last_space = strrpos(substr($input, 0, $length), ' ');
    $trimmed_text = substr($input, 0, $last_space);

    //add ellipses (...)
    if ($ellipses) {
    	$trimmed_text .= '...';
    }

    return $trimmed_text;
}

(Google arama: "php süs elips")

İşte bunu verebilecek bir yolu:

$str = "Stack Overflow is as frictionless and painless to use as we could make it.";

$strMax = 28;
$strTrim = ((strlen($str) < $strMax-3) ? $str : substr($str, 0, $strMax-3)."...");

//or this way to trim to full words
$strFull = ((strlen($str) < $strMax-3) ? $str : strrpos(substr($str, 0, $strMax-3),' ')."...");

Bu benim bildiğim en basit çözümdür ...

substr($string,0,strrpos(substr($string,0,28),' ')).'...';

Bu en kolay yoludur:

<?php 
$title = "this is the title of my website!";
$number_of_characters = 15;
echo substr($title, 0, strrpos(substr($title, 0, $number_of_characters), " "));
?>

Ben bu kadar gibi kelimeler dize bölmek için string tokenizer kullanmak istiyorsunuz:

$string = "Stack Overflow is as frictionless and painless to use as we could make it.";
$tokenized_string = strtok($string, " ");

Sonra tek kelime istediğiniz herhangi bir şekilde çekin.


Edit: Greg ne istediğinizi yapmanın çok daha iyi ve daha şık bir yolu vardır. Ben onun wordwrap () çözümü ile gitmek istiyorum.

kullanabilirsiniz wordwrap.

string wordwrap  ( string $str  [, int $width= 75  [, string $break= "\n"  [, bool $cut= false  ]]] )

-

function firstNChars($str, $n) {
  return array_shift(explode("\n", wordwrap($str, $n)));
}

echo firstNChars("bla blah long string", 25) . "...";

Yasal Uyarı: test etmedi.

Lütfen dize \n s içeriyorsa ayrıca, daha önce kırık alabilirsiniz.

deneyin:

$string='Stack Overflow is as frictionless and painless to use as we could make it.';
$n=28;
$break=strpos(wordwrap($string, $n,'<<||>>'),'<<||>>');
print substr($string,0,($break==0?strlen($string):$break)).(strlen($string)>$n?'...':'');

$string='Stack Overflow';
$n=28;
$break=strpos(wordwrap($string, $n,'<<||>>'),'<<||>>');
print substr($string,0,($break==0?strlen($string):$break)).(strlen($string)>$n?'...':'');

neden bunu patlayan ve dizinin ilk 4 unsurları elde denemiyorsunuz?

substr("some string", 0, x);

PHP Manual Gönderen