Убедитесь, что PHP substr заканчивается словом, а не символом

Я знаю, как использовать функцию substr, но это будет счастливой конец строки наполовину через слово. Я хочу, чтобы строка заканчивалась в конце слова, как я буду делать это? Будет ли это включать регулярное выражение? Любая помощь очень ценится.

Это то, что у меня есть до сих пор. Только SubStr...

echo substr("$body",0,260);

Приветствия

Ответ 1

Это можно сделать с помощью регулярного выражения, что-то вроде этого получит до 260 символов от начала строки до границы слова:

$line=$body;
if (preg_match('/^.{1,260}\b/s', $body, $match))
{
    $line=$match[0];
}

В качестве альтернативы вы можете использовать функцию wordwrap, чтобы разбить ваше тело на строки, а затем просто извлечь первую строку.

Ответ 2

substr($body, 0, strpos($body, ' ', 260))

Ответ 3

Вы можете попробовать следующее:

   $s = substr($string, 0, 261);
   $result = substr($s, 0, strrpos($s, ' '));

Ответ 4

Вы можете сделать следующее: найти первое место из 260-го символа и использовать его как метку обрезки:

$pos = strpos($body, ' ', 260);
if ($pos !== false) {
    echo substr($body, 0, $pos);
}

Ответ 5

wordwrap и взорваться, тогда первый элемент массива вы хотите $wr=wordwrap($text,20,':'); $strs=explode(":",$wr); $strs[0]

Ответ 6

$pos = strpos($body, $wordfind);
echo substr($body,0, (($pos)?$pos:260));

Ответ 7

Я использую это решение:

$maxlength = 50;
substr($name, 0, ($spos = strpos($name, ' ', $lcount = count($name) > $maxlength ? $lcount : $maxlength)) ? $spos : $lcount );

Или встроенный:

substr($name, 0, ($spos = strpos($name, ' ', $lcount = count($name) > 50 ? $lcount : 50)) ? $spos : $lcount );

Ответ 8

function substr_word($body,$maxlength){
    if (strlen($body)<$maxlength) return $body;
    $body = substr($body, 0, $maxlength);
    $rpos = strrpos($body,' ');
    if ($rpos>0) $body = substr($body, 0, $rpos);
    return $body;
}

Ответ 9

Попробуйте эту функцию.

<?php
/**
 * trims text to a space then adds ellipses if desired
 * @param string $input text to trim
 * @param int $length in characters to trim to
 * @param bool $ellipses if ellipses (...) are to be added
 * @param bool $strip_html if html tags are to be stripped
 * @param bool $strip_style if css style are to be stripped
 * @return string
 */
function trim_text($input, $length, $ellipses = true, $strip_tag = true,$strip_style = true) {
    //strip tags, if desired
    if ($strip_tag) {
        $input = strip_tags($input);
    }

    //strip tags, if desired
    if ($strip_style) {
        $input = preg_replace('/(<[^>]+) style=".*?"/i', '$1',$input);
    }

    if($length=='full')
    {

        $trimmed_text=$input;

    }
    else
    {
        //no need to trim, already shorter than trim length
        if (strlen($input) <= $length) {
        return $input;
        }

        //find last space within length
        $last_space = strrpos(substr($input, 0, $length), ' ');
        $trimmed_text = substr($input, 0, $last_space);

        //add ellipses (...)
        if ($ellipses) {
        $trimmed_text .= '...';
        }       
    }

    return $trimmed_text;
}
?>

Ответ 10

public function Strip_text($data, $size, $lastString = ""){
    $data = strip_tags($data);          
    if(mb_strlen($data, 'utf-8') > $size){
        $result = mb_substr($data,0,mb_strpos($data,' ',$size,'utf-8'),'utf-8');
            if(mb_strlen($result, 'utf-8') <= 0){
            $result = mb_substr($data,0,$size,'utf-8');
            $result = mb_substr($result, 0, mb_strrpos($result, ' ','utf-8'),'utf-8');;         
        }
        if(strlen($lastString) > 0) {
            $result .= $lastString;
        }
    }else{
    $result = $data;
    }
    return $result; 
}

Передайте строку в funtion Strip_text ( "Длинный текст с тегом html или без тега html", 15) Затем эта функция вернет первые 15 символов из строки html без тэгов html. Когда строка меньше 15 символов, тогда верните полную строку другой мудрый, она вернет символ 15 с строкой параметра $lastString.

Пример:

Strip_text("<p>vijayDhanasekaran</p>", 5)

Результат: vijay

Strip_text("<h1>vijayDhanasekaran<h1>",5,"***....")

Результат: vijay ***....