web-dev-qa-db-ja.com

追加...文字列が長すぎる場合PHP

MySQLデータベースに説明フィールドがあり、2つの異なるページでデータベースにアクセスします。1ページはフィールド全体を表示しますが、もう1ページは最初の50文字を表示したいだけです。説明フィールドの文字列が50文字未満の場合、...は表示されませんが、そうでない場合は、最初の50文字の後に...が表示されます。

例(完全な文字列):

Hello, this is the first example, where I am going to have a string that is over 50 characters and is super long, I don't know how long maybe around 1000 characters. Anyway this should be over 50 characters now ...

例2(最初の50文字):

Hello, this is the first example, where I am going ...
102
mais-oui

PHPこれを行う方法は簡単です:

$out = strlen($in) > 50 ? substr($in,0,50)."..." : $in;

ただし、次のCSSを使用すると、さらに優れた効果を実現できます。

.Ellipsis {
    overflow: hidden;
    white-space: nowrap;
    text-overflow: Ellipsis;
}

ここで、要素の幅が固定されていると仮定すると、ブラウザは自動的に中断して...を追加します。

284

この方法でも目的のトリムを実現できます。

mb_strimwidth("Hello World", 0, 10, "...");

どこ:

  • Hello World:トリミングする文字列。
  • 0:文字列の先頭からの文字数。
  • 10:トリミングされた文字列の長さ。
  • ...:トリミングされた文字列の最後に追加された文字列。

これはHello W...を返します。

10は切り捨てられた文字列の長さ+追加された文字列であることに注意してください!

ドキュメント: http://php.net/manual/en/function.mb-strimwidth.php

162
jim_kastrin

wordwrap()を使用して文字列を切り捨てます単語を分割せずに文字列が50文字より長い場合は、最後に...を追加します。

$str = $input;
if( strlen( $input) > 50) {
    $str = explode( "\n", wordwrap( $input, 50));
    $str = $str[0] . '...';
}

echo $str;

そうでない場合、substr( $input, 0, 50);を実行するソリューションを使用すると、単語が壊れます。

36
nickb
if (strlen($string) <=50) {
  echo $string;
} else {
  echo substr($string, 0, 50) . '...';
}
12
Tchoupi
<?php
function truncate($string, $length, $stopanywhere=false) {
    //truncates a string to a certain char length, stopping on a Word if not specified otherwise.
    if (strlen($string) > $length) {
        //limit hit!
        $string = substr($string,0,($length -3));
        if ($stopanywhere) {
            //stop anywhere
            $string .= '...';
        } else{
            //stop on a Word.
            $string = substr($string,0,strrpos($string,' ')).'...';
        }
    }
    return $string;
}
?>

上記のコードスニペットを何度も使用します。

5
verisimilitude

私は自分のウェブサイトでこのソリューションを使用しています。 $ strが$ maxより短い場合、変更されません。 $ strの最初の$ max文字間にスペースがない場合、$ maxの位置で残酷にカットされます。そうしないと、最後のWord全体の後に3つのドットが追加されます。

function short_str($str, $max = 50) {
    $str = trim($str);
    if (strlen($str) > $max) {
        $s_pos = strpos($str, ' ');
        $cut = $s_pos === false || $s_pos > $max;
        $str = wordwrap($str, $max, ';;', $cut);
        $str = explode(';;', $str);
        $str = $str[0] . '...';
    }
    return $str;
}
2
Webars

これは、文字の代わりに単語数に基づいて省略記号付きの特定の文字列を返します。

<?php
/**
*    Return an elipsis given a string and a number of words
*/
function elipsis ($text, $words = 30) {
    // Check if string has more than X words
    if (str_Word_count($text) > $words) {

        // Extract first X words from string
        preg_match("/(?:[^\s,\.;\?\!]+(?:[\s,\.;\?\!]+|$)){0,$words}/", $text, $matches);
        $text = trim($matches[0]);

        // Let's check if it ends in a comma or a dot.
        if (substr($text, -1) == ',') {
            // If it's a comma, let's remove it and add a Ellipsis
            $text = rtrim($text, ',');
            $text .= '...';
        } else if (substr($text, -1) == '.') {
            // If it's a dot, let's remove it and add a Ellipsis (optional)
            $text = rtrim($text, '.');
            $text .= '...';
        } else {
            // Doesn't end in dot or comma, just adding Ellipsis here
            $text .= '...';
        }
    }
    // Returns "ellipsed" text, or just the string, if it's less than X words wide.
    return $text;
}

$description = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quibusdam ut placeat consequuntur pariatur iure eum ducimus quasi perferendis, laborum obcaecati iusto ullam expedita excepturi debitis nisi deserunt fugiat velit assumenda. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Incidunt, blanditiis nostrum. Nostrum cumque non rerum ducimus voluptas officia tempore modi, nulla nisi illum, voluptates dolor sapiente ut iusto earum. Esse? Lorem ipsum dolor sit amet, consectetur adipisicing elit. A eligendi perspiciatis natus autem. Necessitatibus eligendi doloribus corporis quia, quas laboriosam. Beatae repellat dolor alias. Perferendis, distinctio, laudantium? Dolorum, veniam, amet!';

echo elipsis($description, 30);
?>
2
<?php
$string = 'This is your string';

if( strlen( $string ) > 50 ) {
   $string = substr( $string, 0, 50 ) . '...';
}

それでおしまい。

1
Berry Langerak
$string = "Hello, this is the first example, where I am going to have a string that is over 50 characters and is super long, I don't know how long maybe around 1000 characters. Anyway this should be over 50 characters know...";

if(strlen($string) >= 50)
{
    echo substr($string, 50); //prints everything after 50th character
    echo substr($string, 0, 50); //prints everything before 50th character
}
1
Nikola K.

このために str_split() を使用できます

$str = "Hello, this is the first example, where I am going to have a string that is over 50 characters and is super long, I don't know how long maybe around 1000 characters. Anyway this should be over 50 characters know...";
$split = str_split($str, 50);
$final = $split[0] . "...";
echo $final;
0
alfrodo