একটি স্ট্রিং এর প্রথম এন অক্ষর পান


320

আমি কীভাবে পিএইচপি-তে স্ট্রিংয়ের প্রথম এন অক্ষর পেতে পারি? একটি নির্দিষ্ট সংখ্যক অক্ষরের সাথে একটি স্ট্রিং ছাঁটানো এবং প্রয়োজনে '...' যুক্ত করার দ্রুততম কোনটি?


5
উপবৃত্তাকার চরিত্রটি ব্যবহার করা আরও ভাল হতে পারে…
কীট

1
আপনি যদি শব্দ কাটা এড়াতে চান তবে আমার উত্তরটি পরীক্ষা করে দেখুন।
টেকনিকুইস্ট


এই লিঙ্কটি ব্যবহার করে দেখুন, আপনাকে সাহায্য করতে পারি ... stackoverflow.com/a/26098951/3944217
edCoder

উত্তর:


577
//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 টি অক্ষরের একটি স্ট্রিং পাবেন; হয় 13 (বা কম) সাধারণ অক্ষর বা 10 ... '' পরে অক্ষর

আপডেট 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;
}

11
3 টি বিন্দু (...) এর পরিবর্তে উপবৃত্ত (…) দিয়ে প্রতিস্থাপন করা সেরা হতে পারে
কিট

3
আমি এটি পছন্দ করি, তবে আমি এটি পরিবর্তন করেছি এবং শেষের দিকে শ্বেত স্থানটি সরাতে নিম্নলিখিতটি ব্যবহার করি: $ স্ট্রিং = সাবস্ট্র (ট্রিম ($ স্ট্রিং), 0,10) ''। ';'; এইভাবে আপনি "আমার পছন্দ ..." এর পরিবর্তে "আমার পছন্দ ..." এর মতো কিছু পান।
কেন্টন ডি জং


2
আপডেট 3 সবচেয়ে সহায়ক।
মিলভোভস্কি

যদি ফিরতি স্ট্রিংয়ের দৈর্ঘ্যে একটি হার্ড ক্যাপ থাকে তবে আপডেট 3 এর 5 লাইনে হওয়া উচিত নয় $string = wordwrap($string, $length - sizeof($append)); ?
মাইকেল ক্রেনশো

114

এই কার্যকারিতাটি পিএইচপি-তে সংস্করণ 4.0.6 থেকে তৈরি করা হয়েছে। দস্তাবেজগুলি দেখুন

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

// outputs Hello W...

লক্ষ্য করুন যে trimmarker(উপরের উপবৃত্তগুলি) কাটা দৈর্ঘ্যের মধ্যে অন্তর্ভুক্ত রয়েছে।


4
আমার জন্য নিখুঁতভাবে কাজ করেছেন। শীর্ষ উত্তরের কাজ হয়নি, এবং আমি আনন্দিত যে এটি তা হয়নি কারণ স্ক্রোলিং চালিয়ে গিয়েছিল এবং এই মণিটি খুঁজে পেয়েছিল।
এডুয়ার্ডো

আপনাকে ধন্যবাদ, আমি সর্বদা এটি দীর্ঘতর এবং পুরানো পদ্ধতিটি ব্যবহার করেছি!
gr3g

1
ড্যান, আপনি শীর্ষের উত্তরের অংশটি আপনার পক্ষে কার্যকর হয়নি সে সম্পর্কে আপনি আরও কিছুটা সুনির্দিষ্ট হতে চান। ফাংশনটি কাটা কাটা () আমার পক্ষে পুরোপুরি কাজ করেছিল এবং ব্রুচস্কির উত্তরের উত্তরটির সুবিধাটি হ'ল এটি শব্দ শর্তে বিভক্ত হয়; ধরে নিচ্ছি যে আপনি এই ধরণের জিনিস সম্পর্কে যত্নশীল।
পিডওয়াকার

2
ভালো বল ধরা! অনেক অভিজ্ঞ পিএইচপি বিকাশকারী এই ফাংশন সম্পর্কে জানেন না :)
jroi_web

1
শীর্ষ (এখনই) উত্তর ( stackoverflow.com/a/3161830/236306 ) কিছুই করেনি (যেন আমি fn ব্যবহার করি নি)। কেন জানি না। এই উত্তরটি নিখুঁত বলে মনে হচ্ছে এবং কাজ করার অতিরিক্ত সুবিধা নিয়ে এসেছিল।
অ্যালান

15

যদি আপনার স্ট্রিং চরসেটের উপরে নিয়ন্ত্রণের প্রয়োজন হয় তবে মাল্টিবাইট এক্সটেনশনটি কাজে আসবে।

$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) . '...';
}

এই কোডটি স্ট্রিংয়ে তিনটি বিন্দু যুক্ত করছে? আমার কোডটির একটি লিঙ্ক ট্যাগ রয়েছে <a> এবং আমি যখন এটি লিঙ্ক করব তখন এটি এটি তিনটি বিন্দুর সাথে একসাথে লিঙ্ক করবে যা এটি ভিন্ন মান হিসাবে আসবে।
ফ্যালোর

9

কখনও কখনও, আপনি স্ট্রিংটি শেষ সম্পূর্ণ শব্দের মধ্যে সীমাবদ্ধ করতে হবে অর্থাত্: আপনি দ্বিতীয় শব্দটি থামানোর পরিবর্তে শেষ শব্দটি ভাঙতে চান না।

উদাহরণস্বরূপ: আমাদের "এটি আমার স্ট্রিং" 6 টি অক্ষরে সীমাবদ্ধ করা দরকার তবে 'এটি আমি ... "পরিবর্তে আমরা চাই এটি' এটি ... 'অর্থাত্ শেষ শব্দটিতে আমরা সেই ভাঙা অক্ষরগুলি এড়িয়ে যাব।

ভাই, ব্যাখ্যা করতে খারাপ, এখানে কোড।

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;
    }

}

9

শব্দগুলি বিভক্ত না করার বিষয়ে যদি আপনি সতর্কতা অবলম্বন করতে চান তবে নিম্নলিখিতগুলি করতে পারেন

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;
}

যদি $ স্ট্রিংটি sh n_chars এর চেয়ে কম হয় তবে এগুলি অচ্ছুত করে দেয়।

যদি $ str এর সমান হয় $ n_chars এটিও প্রদান করে।

যদি $আরআরটি $ n_chars এর চেয়ে দীর্ঘ হয় তবে এটি পরবর্তী স্থানটি কাটতে বা (শেষ অবধি আর স্পেস না থাকলে) looks n এর পরিবর্তে অভদ্রভাবে কাটবে at n_chars।

দ্রষ্টব্য: সচেতন হন যে এই পদ্ধতিটি এইচটিএমএলের ক্ষেত্রে সমস্ত ট্যাগ সরিয়ে ফেলবে।


8

কোডইনিটার ফ্রেমওয়ার্কটিতে এটির জন্য একটি সহায়ক রয়েছে, যাকে "পাঠ্য সহায়ক" বলা হয়। কোডাইনাইটারের ব্যবহারকারী নির্দেশিকা থেকে এখানে কিছু ডকুমেন্টেশন রয়েছে যা প্রযোজ্য: http://codeigniter.com/user_guide/helpers/text_helper.html (কেবলমাত্র শব্দ_লিমিটার এবং চরিত্র_লমিটার বিভাগগুলি পড়ুন)। আপনার প্রশ্নের সাথে সম্পর্কিত এটি থেকে এখানে দুটি ফাংশন রয়েছে:

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;
            }       
        }
    }
}

4

সাবস্ট্রিং ব্যবহার করুন

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

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

3
এই কোডটি সর্বদা ... স্ট্রিংয়ে যোগ করবে, যা সে চায়নি।
ট্র্যাভিসো

আপনি একেবারে সঠিক, এবং আমি সেই অনুসারে উত্তরটি সম্পাদনা করেছি। (বর্তমানে এসও পিয়ার পর্যালোচনার অপেক্ষায় থাকা সংশোধিত উত্তর)
ছায়া কুপার

3
if(strlen($text) > 10)
     $text = substr($text,0,10) . "...";

উপরে @ ব্রেন্ডন বুলেন থেকে .. $ স্ট্রিং = (স্ট্রেন ($ স্ট্রিং)> 13)? সাবস্ট্রাস্ট ($ স্ট্রিং, 0,10) .'... ': $ স্ট্রিং; সুন্দর!
মার্কোজেইন


1

এই আমি কি কি

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

যেখানে $ num হ'ল অক্ষরের সংখ্যা, এবং ম্যানিপুলেশনের জন্য স্ট্রিং। tt।


1

আমি এই ব্যবহারের জন্য একটি ফাংশন বিকাশ করেছি

 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;
            }
        }

আপনি শুধু স্ট্রিং সঙ্গে ফাংশন কল এবং Limite
উদাহরণ: str_short("hahahahahah",5);
এটি আপনার স্ট্রিং কেটে ফেলবে এবং শেষে "..." যুক্ত করবে
:)


1

একটি ফাংশন (পুনরাবৃত্তি ব্যবহারের জন্য) এবং গতিশীল সীমিত দৈর্ঘ্যের মধ্যে তৈরি করতে, ব্যবহার করুন:

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, '..');

1

আপনার মত কোডটি বিমূর্ত করা ভাল (লক্ষ্য করুন সীমাটি optionচ্ছিক এবং ডিফল্ট 10 এ):

print limit($string);


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

1
এটি কাজ করবে না কারণ ট্রিম () ইতিমধ্যে বিদ্যমান।
গর্ডন

এই পন্থাটি কেন এটি দৃ ?়ভাবে দাবি করার পরিবর্তে সর্বোত্তম?
রবার্ট

1
@ রবার্ট এটি সহজ, এবং বিমূর্ত করার অর্থ আপনাকে কোডটি বারবার টাইপ করতে হবে না। এবং সর্বাধিক গুরুত্বপূর্ণভাবে, যদি আপনি এটির জন্য আরও ভাল উপায় খুঁজে পান বা আরও জটিল কিছু চান, আপনি কেবলমাত্র 50 টি কোডের পরিবর্তে এই 1 ফাংশনটি পরিবর্তন করেন।
ট্র্যাভিসো

2
ফাংশনটি বড়হাতে কেন?
কার্লো

ফিক্স: $ var এর সাবস্ট্রাস্ট, স্ট্রিং নয়। এর বিপরীতে পরীক্ষা করুন $limit + 3যাতে আপনি কেবল সীমা ছাড়িয়ে কোনও স্ট্রিং ছাঁটাবেন না । আপনার অ্যাপ্লিকেশন (উদাহরণস্বরূপ, এইচটিএমএল আউটপুট) এর উপর নির্ভর করে &hellip;পরিবর্তে কোনও সত্তা ব্যবহার করে বিবেচনা করুন (টাইপোগ্রাফিকভাবে আরও আনন্দদায়ক) আগেই যেমন পরামর্শ দেওয়া হয়েছে, উপবৃত্তাকার যুক্ত করার আগে (সংক্ষিপ্ত) স্ট্রিংয়ের শেষে থেকে কোনও অ-অক্ষর ছাঁটাই। অবশেষে, আপনি একটি মাল্টিবাইট (যেমন, ইউটিএফ -8) পরিবেশে রয়েছেন কিনা তা দেখুন - আপনি স্ট্র্লেন () এবং সাবস্ট্রাস্ট () ব্যবহার করতে পারবেন না।
ফিল পেরি 14


0

সাবস্ট্রাস্ট () সেরা হবে, আপনি প্রথমে স্ট্রিংয়ের দৈর্ঘ্যও পরীক্ষা করতে চান

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

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

ওয়ার্ড র্যাপ স্ট্রিংটি নীচে ছাঁটাবে না, কেবল এটি বিভক্ত করুন ...


0

$ প্রস্থ = 10;

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

বা ওয়ার্ড র্যাপ দিয়ে

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

0

এই সমাধানটি শব্দগুলি কাটবে না, এটি প্রথম স্থানের পরে তিনটি বিন্দু যুক্ত করবে। আমি @ র্যাকুন ২৯ সমাধান সম্পাদনা করেছি এবং আমি সমস্ত ফাংশনগুলিকে এমবি_ ফাংশন দিয়ে প্রতিস্থাপন করেছি যাতে এটি আরবি হিসাবে সমস্ত ভাষার জন্য কাজ করবে

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;
}

0
$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;

0

যদি কাটা স্ট্রিংয়ের দৈর্ঘ্যের জন্য কোনও কঠোর প্রয়োজনীয়তা না থাকে, তবে কেউ এটি শেষ শব্দটি কেটে ফেলতে এবং প্রতিরোধ করতে ব্যবহার করতে পারেন:

$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.onlinephpfunitions.com/code/25484a8b687d1f5ad93f62082b6379662a6b4713

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.