আমি কীভাবে পিএইচপি-তে স্ট্রিংয়ের প্রথম এন অক্ষর পেতে পারি? একটি নির্দিষ্ট সংখ্যক অক্ষরের সাথে একটি স্ট্রিং ছাঁটানো এবং প্রয়োজনে '...' যুক্ত করার দ্রুততম কোনটি?
আমি কীভাবে পিএইচপি-তে স্ট্রিংয়ের প্রথম এন অক্ষর পেতে পারি? একটি নির্দিষ্ট সংখ্যক অক্ষরের সাথে একটি স্ট্রিং ছাঁটানো এবং প্রয়োজনে '...' যুক্ত করার দ্রুততম কোনটি?
উত্তর:
//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;
}
$string = wordwrap($string, $length - sizeof($append));
?
এই কার্যকারিতাটি পিএইচপি-তে সংস্করণ 4.0.6 থেকে তৈরি করা হয়েছে। দস্তাবেজগুলি দেখুন ।
echo mb_strimwidth('Hello World', 0, 10, '...');
// outputs Hello W...
লক্ষ্য করুন যে trimmarker
(উপরের উপবৃত্তগুলি) কাটা দৈর্ঘ্যের মধ্যে অন্তর্ভুক্ত রয়েছে।
যদি আপনার স্ট্রিং চরসেটের উপরে নিয়ন্ত্রণের প্রয়োজন হয় তবে মাল্টিবাইট এক্সটেনশনটি কাজে আসবে।
$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) . '...';
}
কখনও কখনও, আপনি স্ট্রিংটি শেষ সম্পূর্ণ শব্দের মধ্যে সীমাবদ্ধ করতে হবে অর্থাত্: আপনি দ্বিতীয় শব্দটি থামানোর পরিবর্তে শেষ শব্দটি ভাঙতে চান না।
উদাহরণস্বরূপ: আমাদের "এটি আমার স্ট্রিং" 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;
}
}
শব্দগুলি বিভক্ত না করার বিষয়ে যদি আপনি সতর্কতা অবলম্বন করতে চান তবে নিম্নলিখিতগুলি করতে পারেন
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।
দ্রষ্টব্য: সচেতন হন যে এই পদ্ধতিটি এইচটিএমএলের ক্ষেত্রে সমস্ত ট্যাগ সরিয়ে ফেলবে।
কোডইনিটার ফ্রেমওয়ার্কটিতে এটির জন্য একটি সহায়ক রয়েছে, যাকে "পাঠ্য সহায়ক" বলা হয়। কোডাইনাইটারের ব্যবহারকারী নির্দেশিকা থেকে এখানে কিছু ডকুমেন্টেশন রয়েছে যা প্রযোজ্য: http://codeigniter.com/user_guide/helpers/text_helper.html (কেবলমাত্র শব্দ_লিমিটার এবং চরিত্র_লমিটার বিভাগগুলি পড়ুন)। আপনার প্রশ্নের সাথে সম্পর্কিত এটি থেকে এখানে দুটি ফাংশন রয়েছে:
if ( ! function_exists('word_limiter'))
{
function word_limiter($str, $limit = 100, $end_char = '…')
{
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 = '…')
{
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;
}
}
}
}
সাবস্ট্রিং ব্যবহার করুন
http://php.net/manual/en/function.substr.php
$foo = substr("abcde",0, 3) . "...";
if(strlen($text) > 10)
$text = substr($text,0,10) . "...";
আমি যে ফাংশনটি ব্যবহার করেছি:
function cutAfter($string, $len = 30, $append = '...') {
return (strlen($string) > $len) ?
substr($string, 0, $len - strlen($append)) . $append :
$string;
}
এটি কর্মে দেখুন ।
আমি এই ব্যবহারের জন্য একটি ফাংশন বিকাশ করেছি
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)
;
এটি আপনার স্ট্রিং কেটে ফেলবে এবং শেষে "..." যুক্ত করবে
:)
একটি ফাংশন (পুনরাবৃত্তি ব্যবহারের জন্য) এবং গতিশীল সীমিত দৈর্ঘ্যের মধ্যে তৈরি করতে, ব্যবহার করুন:
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, '..');
আপনার মত কোডটি বিমূর্ত করা ভাল (লক্ষ্য করুন সীমাটি optionচ্ছিক এবং ডিফল্ট 10 এ):
print limit($string);
function limit($var, $limit=10)
{
if ( strlen($var) > $limit )
{
return substr($string, 0, $limit) . '...';
}
else
{
return $var;
}
}
$limit + 3
যাতে আপনি কেবল সীমা ছাড়িয়ে কোনও স্ট্রিং ছাঁটাবেন না । আপনার অ্যাপ্লিকেশন (উদাহরণস্বরূপ, এইচটিএমএল আউটপুট) এর উপর নির্ভর করে …
পরিবর্তে কোনও সত্তা ব্যবহার করে বিবেচনা করুন (টাইপোগ্রাফিকভাবে আরও আনন্দদায়ক) আগেই যেমন পরামর্শ দেওয়া হয়েছে, উপবৃত্তাকার যুক্ত করার আগে (সংক্ষিপ্ত) স্ট্রিংয়ের শেষে থেকে কোনও অ-অক্ষর ছাঁটাই। অবশেষে, আপনি একটি মাল্টিবাইট (যেমন, ইউটিএফ -8) পরিবেশে রয়েছেন কিনা তা দেখুন - আপনি স্ট্র্লেন () এবং সাবস্ট্রাস্ট () ব্যবহার করতে পারবেন না।
এটি দ্রুততম সমাধান কিনা তা আমি নিশ্চিত নই, তবে মনে হচ্ছে এটি সবচেয়ে কমতম:
$result = current(explode("\n", wordwrap($str, $width, "...\n")));
PS এখানে কিছু উদাহরণ দেখুন https://stackoverflow.com/a/17852480/131337
এই সমাধানটি শব্দগুলি কাটবে না, এটি প্রথম স্থানের পরে তিনটি বিন্দু যুক্ত করবে। আমি @ র্যাকুন ২৯ সমাধান সম্পাদনা করেছি এবং আমি সমস্ত ফাংশনগুলিকে এমবি_ ফাংশন দিয়ে প্রতিস্থাপন করেছি যাতে এটি আরবি হিসাবে সমস্ত ভাষার জন্য কাজ করবে
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.onlinephpfunitions.com/code/25484a8b687d1f5ad93f62082b6379662a6b4713