PHP bir karakter sınırı içinde tutarak bir kelime aracılığıyla dilimleme olmayan bir dize kısaltmak için nasıl [yinelenen]

7 Cevap php

Possible Duplicate:
How to Truncate a string in PHP to the word closest to a certain number of characters?

Nasıl bir kelime aracılığıyla dilimleme olmadan 140 karakter maksimum bir dize kısaltabilir.

Aşağıdaki dizeyi atın:

$string = "This is an example string that contains more than 140 characters. If I use PHPs substring function it will split it in the middle of this word."

substr($string, 0, 140) böyle bir şey olsun istiyorum kullanma:

This is an example string that contains more than 140 characters. If I use PHPs substring function it will split it in the middle of this wo

Bu kelime "kelime" ile dilimlenmiş dikkat edin.

Ne gerek tüm kelimeleri korurken bir dize kısaltmak mümkün ama fazla 140 karakter gitmeden.

Ben aşağıdaki kodu buldunuz ama bütün kelimeleri korumak olsa bile, bu tüm dize 140 karakter sınırı üzerinden gitmez garanti etmez:

function truncate($text, $length) {
   $length = abs((int)$length);
   if(strlen($text) > $length) {
      $text = preg_replace("/^(.{1,$length})(\s.*|$)/s", '\\1...', $text);
   }
   return($text);
}

7 Cevap

Dizesi çok uzun ise, önce son tam veya kısmi sözcüğü kaldırmak için dize ve daha sonra düzenli bir ifade kesecek substr kullanabilirsiniz:

$s = substr($s, 0, (140 - 3));
$s = preg_replace('/ [^ ]*$/', ' ...', $s);

Eğer ... eklediğinizde bu 140 byte ötesinde dize uzunluğunu artırmak, çünkü orijinal daha kısa 140 bayt yapmak zorunda olduğunu unutmayın.

Bu Drupal kelimeleri bozmadan dizeleri kısaltmak için kullandığı işlevdir.

//$wordsafe: set to TRUE to not truncate in middle of words
//$dots: set to TRUE to add " ..." to the end of the truncated string
function truncate_utf8($string, $len, $wordsafe = FALSE, $dots = FALSE) {

  if (strlen($string) <= $len) {
    return $string;
  }

  if ($dots) {
    $len -= 4;
  }

  if ($wordsafe) {
    $string = substr($string, 0, $len + 1); // leave one more character
    if ($last_space = strrpos($string, ' ')) { // space exists AND is not on position 0
      $string = substr($string, 0, $last_space);
    }
    else {
      $string = substr($string, 0, $len);
    }
  }
  else {
    $string = substr($string, 0, $len);
  }

  if ($dots) {
    $string .= ' ...';
  }

  return $string;
}

Bunu böylece Ayrıca dizeleri onlara sekmeleri, \ t, olması olası değildir

$str = word_wrap( $str, 140, "\t" );
$str = explode( "\t", $str );
$str = $str[0];

Ben çok iyi php biliyorum ama burada size tahmini sözdizimi ile bunu nasıl olduğunu değil

$total_length = 0;

$words = $whole_sentense->split(' ')

$word_index = 0

$final_sentense = ''

while($total_length + strlen($words[$word_index]) < 140)
{
  $final_sentense .= words[$word_index]
  $total_length += strlen($words[$word_index]
  $word_index++
}

return ($final_sentense)

Sen php kılavuzdaki strtok bakmak isteyebilirsiniz.

Ne yapabilirim bir döngü çalıştırın ve sizin istediğiniz uzunluğu aşan kadar strlen jetonu her zaman eklemek edilmektedir.