programing

문자열을 문자열의 처음 n자로 잘라내고 문자가 제거되면 점 3개를 추가합니다.

goodsources 2022. 9. 13. 22:19
반응형

문자열을 문자열의 처음 n자로 잘라내고 문자가 제거되면 점 3개를 추가합니다.

어떻게 하면 PHP에서 문자열의 첫 번째 n자를 얻을 수 있을까요?문자열을 특정 개수의 문자로 트리밍하고 필요한 경우 '...'를 추가하는 가장 빠른 방법은 무엇입니까?

//The simple version for 10 Characters from the beginning of the string
$string = substr($string,0,10).'...';

업데이트:

길이를 확인하는 방법에 대한 권장 사항에 따라(또한 트리밍된 문자열과 림되지 않은 문자열의 길이가 유사함을 확인합니다).

$string = (strlen($string) > 13) ? substr($string,0,10).'...' : $string;

따라서 13자 이하의 일반 문자 또는 10자 뒤에 '...'가 이어지는 문자열이 최대 13자로 표시됩니다.

업데이트 2:

또는 기능으로서:

function truncate($string, $length, $dots = "...") {
    return (strlen($string) > $length) ? substr($string, 0, $length - strlen($dots)) . $dots : $string;
}

업데이트 3:

제가 이 답을 쓴 지 오래돼서 더 이상 이 코드를 사용하지 않아요.는 이 이 끊어지지 하는 합니다.wordwrap★★★★

function truncate($string,$length=100,$append="…") {
  $string = trim($string);

  if(strlen($string) > $length) {
    $string = wordwrap($string, $length);
    $string = explode("\n", $string, 2);
    $string = $string[0] . $append;
  }

  return $string;
}

이 기능은 버전 4.0.6부터 PHP에 포함되어 있습니다.문서를 참조해 주세요.

echo mb_strimwidth('Hello World', 0, 10, '...');

// outputs Hello W...

에 주의:trimmarker을 사용하다

Multibyte 확장자는 문자열 문자 집합을 제어해야 하는 경우 유용합니다.

$charset = 'UTF-8';
$length = 10;
$string = 'Hai to yoo! I like yoo soo!';
if(mb_strlen($string, $charset) > $length) {
  $string = mb_substr($string, 0, $length - 3, $charset) . '...';
}

문자열을 마지막 완료 단어로 제한해야 할 경우가 있습니다. 즉, 마지막 단어가 끊어지지 않도록 하려면 두 번째 마지막 단어로 중단해야 합니다.

예: "This is my String"을 6자로 제한해야 하는데 "This i"가 아니라..'이거'로 하고 싶어요(마지막 단어에 있는 깨진 글자는 생략하겠습니다.

휴, 설명이 서툴러요, 여기 코드가 있어요.

class Fun {

    public function limit_text($text, $len) {
        if (strlen($text) < $len) {
            return $text;
        }
        $text_words = explode(' ', $text);
        $out = null;


        foreach ($text_words as $word) {
            if ((strlen($word) > $len) && $out == null) {

                return substr($word, 0, $len) . "...";
            }
            if ((strlen($out) + strlen($word)) > $len) {
                return $out . "...";
            }
            $out.=" " . $word;
        }
        return $out;
    }

}

단어를 분할하지 않도록 주의하면서 잘라내고 싶다면 다음을 수행할 수 있습니다.

function ellipse($str,$n_chars,$crop_str=' [...]')
{
    $buff=strip_tags($str);
    if(strlen($buff) > $n_chars)
    {
        $cut_index=strpos($buff,' ',$n_chars);
        $buff=substr($buff,0,($cut_index===false? $n_chars: $cut_index+1)).$crop_str;
    }
    return $buff;
}

$str이 $n_chars보다 작을 경우 변경되지 않고 반환됩니다.

$str이 $n_chars와 같으면 그대로 반환합니다.

$str이 $n_chars보다 길면 다음 컷할 공간을 찾습니다.마지막까지 공백이 없을 경우 $str이 $n_chars로 거칠게 컷됩니다.

메모: 이 방법을 사용하면 HTML의 경우 모든 태그가 삭제됩니다.

코드 시그니터 프레임워크에는 "텍스트 도우미"라는 이름의 도우미가 포함되어 있습니다.다음은 코드 시그니터 사용자 가이드의 일부 문서입니다.http://codeigniter.com/user_guide/helpers/text_helper.html (word_limiter 및 character_limiter 섹션을 읽어주세요).다음은 질문과 관련된 두 가지 기능입니다.

if ( ! function_exists('word_limiter'))
{
    function word_limiter($str, $limit = 100, $end_char = '&#8230;')
    {
        if (trim($str) == '')
        {
            return $str;
        }

        preg_match('/^\s*+(?:\S++\s*+){1,'.(int) $limit.'}/', $str, $matches);

        if (strlen($str) == strlen($matches[0]))
        {
            $end_char = '';
        }

        return rtrim($matches[0]).$end_char;
    }
}

그리고.

if ( ! function_exists('character_limiter'))
{
    function character_limiter($str, $n = 500, $end_char = '&#8230;')
    {
        if (strlen($str) < $n)
        {
            return $str;
        }

        $str = preg_replace("/\s+/", ' ', str_replace(array("\r\n", "\r", "\n"), ' ', $str));

        if (strlen($str) <= $n)
        {
            return $str;
        }

        $out = "";
        foreach (explode(' ', trim($str)) as $val)
        {
            $out .= $val.' ';

            if (strlen($out) >= $n)
            {
                $out = trim($out);
                return (strlen($out) == strlen($str)) ? $out : $out.$end_char;
            }       
        }
    }
}
if(strlen($text) > 10)
     $text = substr($text,0,10) . "...";

서브스트링 사용

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

$foo = substr("abcde",0, 3) . "...";

사용한 기능:

function cutAfter($string, $len = 30, $append = '...') {
        return (strlen($string) > $len) ? 
          substr($string, 0, $len - strlen($append)) . $append : 
          $string;
}

실제 상황 보기.

이게 내가 하는 일이야

    function cutat($num, $tt){
        if (mb_strlen($tt)>$num){
            $tt=mb_substr($tt,0,$num-2).'...';
        }
        return $tt;
    }

여기서 $num은 문자 수를 나타내고 $tt는 조작 문자열을 나타냅니다.

이 용도로 사용할 수 있는 기능을 개발했습니다.

 function str_short($string,$limit)
        {
            $len=strlen($string);
            if($len>$limit)
            {
             $to_sub=$len-$limit;
             $crop_temp=substr($string,0,-$to_sub);
             return $crop_len=$crop_temp."...";
            }
            else
            {
                return $string;
            }
        }

스트링과 리마이트로 함수를 호출하기만 하면 됩니다.
예:str_short("hahahahahah",5);
끈을 잘라 마지막에 "..."을 붙입니다.
:)

함수 내(반복 사용) 및 동적 제한 길이를 작성하려면 다음과 같이 사용합니다.

function string_length_cutoff($string, $limit, $subtext = '...')
{
    return (strlen($string) > $limit) ? substr($string, 0, ($limit-strlen(subtext))).$subtext : $string;
}

// example usage:
echo string_length_cutoff('Michelle Lee Hammontree-Garcia', 26);

// or (for custom substitution text
echo string_length_cutoff('Michelle Lee Hammontree-Garcia', 26, '..');

다음과 같이 코드를 추상화하는 것이 가장 좋습니다(제한은 옵션이며 기본값은 10입니다).

print limit($string);


function limit($var, $limit=10)
{
    if ( strlen($var) > $limit )
    {
        return substr($string, 0, $limit) . '...';
    }
    else
    {
        return $var;
    }
}

이것이 가장 빠른 해결책인지는 모르겠지만 가장 짧은 해결책인 것 같습니다.

$result = current(explode("\n", wordwrap($str, $width, "...\n")));

추신. https://stackoverflow.com/a/17852480/131337의 예를 참조하십시오.

이 기능은 중간에 말을 끊지 않고 작업을 수행합니다.

    function str_trim($str,$char_no){
        if(strlen($str)<=$char_no)
            return $str;
        else{
            $all_words=explode(" ",$str);
            $out_str='';
            foreach ($all_words as $word) {
                $temp_str=($out_str=='')?$word:$out_str.' '.$word;
                if(strlen($temp_str)>$char_no-3)//-3 for 3 dots
                    return $out_str."...";
                $out_str=$temp_str;
            }
        }
    }

substrate()가 가장 좋습니다.또한 문자열의 길이를 먼저 확인해야 합니다.

$str = 'someLongString';
$max = 7;

if(strlen($str) > $max) {
   $str = substr($str, 0, $max) . '...';
}

워드랩이 줄을 자르진 않고 그냥 쪼개서...

$width = 10;

$a = preg_replace ("~^(.{{$width}})(.+)~", '\\1…', $a);

또는 워드랩으로

$a = preg_replace ("~^(.{1,${width}}\b)(.+)~", '\\1…', $a);

이 솔루션은 단어를 자르지 않고 첫 번째 공백 뒤에 세 개의 점을 추가합니다.@Raccoon29 솔루션을 편집하여 모든 기능을 mb_ 함수로 대체하여 아랍어 등 모든 언어에 대응합니다.

function cut_string($str, $n_chars, $crop_str = '...') {
    $buff = strip_tags($str);
    if (mb_strlen($buff) > $n_chars) {
        $cut_index = mb_strpos($buff, ' ', $n_chars);
        $buff = mb_substr($buff, 0, ($cut_index === false ? $n_chars : $cut_index + 1), "UTF-8") . $crop_str;
    }
    return $buff;
}
$yourString = "bla blaaa bla blllla bla bla";
$out = "";
if(strlen($yourString) > 22) {
    while(strlen($yourString) > 22) {
        $pos = strrpos($yourString, " ");
        if($pos !== false && $pos <= 22) {
            $out = substr($yourString,0,$pos);
            break;
        } else {
            $yourString = substr($yourString,0,$pos);
            continue;
        }
    }
} else {
    $out = $yourString;
}
echo "Output String: ".$out;

잘라낸 문자열의 길이에 대한 엄격한 요구사항이 없는 경우, 이를 사용하여 마지막 단어를 잘라내거나 잘라내는 것을 방지할 수 있습니다.

$text = "Knowledge is a natural right of every human being of which no one
has the right to deprive him or her under any pretext, except in a case where a
person does something which deprives him or her of that right. It is mere
stupidity to leave its benefits to certain individuals and teams who monopolize
these while the masses provide the facilities and pay the expenses for the
establishment of public sports.";

// we don't want new lines in our preview
$text_only_spaces = preg_replace('/\s+/', ' ', $text);

// truncates the text
$text_truncated = mb_substr($text_only_spaces, 0, mb_strpos($text_only_spaces, " ", 50));

// prevents last word truncation
$preview = trim(mb_substr($text_truncated, 0, mb_strrpos($text_truncated, " ")));

이 경우,$preview될 것이다"Knowledge is a natural right of every human being".

라이브 코드 예:http://sandbox.onlinephpfunctions.com/code/25484a8b687d1f5ad93f62082b6379662a6b4713

언급URL : https://stackoverflow.com/questions/3161816/truncate-a-string-to-first-n-characters-of-a-string-and-add-three-dots-if-any-ch

반응형