كيف تقطع النص بعد كمية معينة من الأحرف في PHP؟

StackOverflow https://stackoverflow.com/questions/1241224

  •  12-09-2019
  •  | 
  •  

سؤال

لدي سلسلة أردتان أريد أن أقصر من أهم 25 حرفا على سبيل المثال. هل هناك طريقة لقطع النص بعد الحرف الخامس عشر وإضافة ... إلى نهاية السلسلة؟

لذلك "12345678901234567890ABCDEFG 'سوف تتحول إلى" 12345678901234567890ABCDE ... "حيث يتم قطع" FG ".

هل كانت مفيدة؟

المحلول

هل يمكنني إجراء تعديل على رمز Pallan؟

$truncated = (strlen($string) > 20) ? substr($string, 0, 20) . '...' : $string;

هذا لا يضيف "..." إذا كان أقصر.

نصائح أخرى

لتجنب قطع الحق في منتصف الكلمة، قد ترغب في تجربة wordwrap وظيفة ؛ شيء من هذا القبيل، أفترض، يمكن القيام به:

$str = "this is a long string that should be cut in the middle of the first 'that'";
$wrapped = wordwrap($str, 25);
var_dump($wrapped);

$lines = explode("\n", $wrapped);
var_dump($lines);

$new_str = $lines[0] . '...';
var_dump($new_str);

$wrapped سوف يحتوي :

string 'this is a long string
that should be cut in the
middle of the first
'that'' (length=74)

ال $lines سيكون مجموعة مثل:

array
  0 => string 'this is a long string' (length=21)
  1 => string 'that should be cut in the' (length=25)
  2 => string 'middle of the first' (length=19)
  3 => string ''that'' (length=6)

وأخيرا، الخاص بك $new_string :

string 'this is a long string' (length=21)


مع مجموعة، مثل هذا:

var_dump(substr($str, 0, 25) . '...');

لقد حصلت على:

string 'this is a long string tha...' (length=28)

الذي لا يبدو لطيفا :-(


لا يزال، استمتع!

حقا بسرعة،

$truncated = substr('12345678901234567890abcdefg', 0, 20) . '...'

هذا واحد قصير ويأخذ حدود الكلمات في الاعتبار، لا يستخدم الحلقات التي تجعلها فعالة للغاية

function truncate($str, $chars, $end = '...') {
    if (strlen($str) <= $chars) return $str;
    $new = substr($str, 0, $chars + 1);
    return substr($new, 0, strrpos($new, ' ')) . $end;
}

الاستعمال:

truncate('My string', 5); //returns: My...

http://php.net/manual/en/function.mb-strimwidth.php. (PHP 4> = 4.0.6، PHP 5، PHP 7)

<?php
echo mb_strimwidth("Hello World", 0, 10, "...");
echo "<br />";
echo mb_strimwidth("Hello", 0, 10, "...");
?>

انتاج:

Hello W...
Hello
$words=explode(' ', $string);
for($ii = 0,$j=0; $ii< 5 && $j < sizeof($words) ;$j++){
    $ii += strlen($words[$j]);
    $intro= $words[$j]. " ";    
}
$intro.= "...";

أعلم أنه في وقت متأخر، ولكن إذا عاد أي شخص آخر إلى هذه الصفحة، فسيفعل ذلك،

سلع الوظيفة هي الحق المناسب لك

أنت تبحث عن سلع طريقة.

$s = substr($input, 0, 25);

سيؤدي ذلك إلى الحصول على أول تشاك من السلسلة ثم يمكنك إلحاق ما تريد النهاية.

سأذهب مع إجابة باسكال مارتن، مع بعض التحسينات الإضافية. لأن؛

1 - "PHP WordWrap"، يحترم حدود الكلمات تلقائيا

2 - إذا كانت السلسلة تحتوي على كلمة أكثر من 25 حرفا (Aagh، فلا يوجد شيء للقيام به)، يمكنك إجبار "PHP WordWrap" على خفض الكلمة. (التحسين)

3 - إذا كانت السلسلة الخاصة بك أقصر من 25 حرفا، فإن "..." سوف تبدو قبيحة بعد جملة كاملة. (تحسين)

$str = "This string might be longer than 25 chars, or might not!";
// we are forcing to cut long words...
$wrapped = wordwrap($str, 25, "\n", 1);
var_dump($wrapped);

$lines = explode("\n", $wrapped);
var_dump($lines);

// if our $str is shorter than 25, there will be no $lines[1]
(array_key_exists('1', $lines)) ? $suffix = '...' : $suffix = '';
$new_str = $lines[0] . $suffix;
var_dump($new_str);
<?php echo substr('12345678901234567890abcdefg', 0, 20) . '...' ?>

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

 echo substr($str,0,25)."...";

ستفعل الخدعة، ولكن إذا كنت تتعامل مع الكلمات، فقد ترغب في قطع على حدود Word حتى لا يكون لديك Word جزئي Doig هذا: The Quick BL ...

لذلك للقيام بذلك (الخام قبالة رأس رأسي):

$words = split(" ", strlen($str));

for($i = 0,$j=0; $i< 25 && $j < sizeof($words) ;$j++)
{
    $i += strlen($words[$j]);
    echo $words[$j]. " ";    
}
echo "...";
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top