2012-05-11 4 views
0

Я использую следующие, чтобы ограничить количество символов в строкеОграничение количества символов в строке

<?php $eventtitle1 = get_the_title(); 
$eventtitle1_str = strip_tags($eventtitle1, ''); 
echo substr($eventtitle1_str,0,30) . "…"; ?> 

Можно ли добавить «...», если строка больше 30 символов, но не добавить его, если он меньше?

например

Так что делает это для более длинного заголовка:

«Это больше ти ...»

И он делает это за короткое название:

«Это название«

(т. Е. Не это - «Это название ...»)

+1

Я бы рекомендовал делать 'если statement' – RSM

+0

Просто проверить длину строки перед тем, как сократить его. Если это более 30 символов, обрезайте и добавьте многоточие. Если нет, ничего не делайте. Для этого вам нужен оператор 'if': http://php.net/manual/en/control-structures.if.php –

+1

Возможный дубликат [Сокращение строки с ... в конце] (http: // stackoverflow.com/questions/4474517/shortening-a-string-with-on-the-end) и [возможно, другие] (http://stackoverflow.com/search?q=php+truncate+string+ellipsis). –

ответ

2

Попробуйте

<?php $eventtitle1 = get_the_title(); 
    $eventtitle1_str = strip_tags($eventtitle1, ''); 
    $strlen= strlen ($eventtitle1_stng); 
    if($strlen>30) 
    echo substr($eventtitle1_str,0,30) . "…"; 
    else 
    echo $eventtitle1_str; 
    ?> 
+2

Должно, вероятно, использовать '& hellip;' вместо '...' – Nick

+0

@ Ник да, он должен. –

2
public function Truncate($string, $maxLen) 
{ 
    if (strlen($string) > $maxLen) 
    { 
     return substr($string, 0, $maxLen) . '...'; 
    } 
    return $string; 
} 
0

Попробуйте это:

if (strlen($eventtitle1_str) > 30) { 
    $eventtitle1_str = substr($eventtitle1_str,0,30) . "…"; 
} 
0
if (strlen ($eventtitle1_str) > 30) { 
    //Some logic 
} 
else { 
    // Some logic 
} 
0

См strlen.

Например:

echo substr($eventtitle1_str,0,30) . (strlen($eventtitle1_str) > 30 ? "…" : ""); 
0

Вы можете использовать strlen для проверки количества символов.

<?php $eventtitle1 = get_the_title(); 
    $eventtitle1_str = strip_tags($eventtitle1, ''); 
    if(strlen($eventtitle1_str) > 30){  
     echo substr($eventtitle1_str,0,30) . "…"; 
    }else{ 
     echo substr($eventtitle1_str,0,30); 
    } 

?> 

благодаря

0
<?php 
$eventtitle1 = get_the_title(); 
$eventtitle1_str = strip_tags($eventtitle1, ''); 

if (strlen($eventtitle1_str) > 30) { 
    echo substr($eventtitle1_str, 0, 30)."…"; 
} else { 
    echo $eventtitle1_str; 
} 
0

Помимо множества правильных ответов здесь Я также рекомендую использовать&hellip; лица в HTML вместо ..., а также MBstring расширения.

Так что код будет выглядеть следующим образом:

$eventtitle1 = get_the_title(); 
$eventtitle1_str = strip_tags($eventtitle1, ''); 
if(mb_strlen($eventtitle1_str) > 30) 
    echo mb_substr($eventtitle1_str, 0, 30) . "&hellip;"; 
} else { 
    echo $eventtitle1_str; 
} 
+0

Должен быть комментарий ИМО. –

+0

@FelixKling Если бы это было написано как комментарий, то решил сделать это ответом ... Это так плохо? Нет проблем превратить его в комментарий к OP ... – shadyyx

+0

Это просто не отвечает на вопрос, это больше похоже на дополнительную информацию *, на мой взгляд *. Другие могут подумать по-другому ... делайте то, что вам больше всего нравится :) –

0

Я думаю, что его работа для str_word_counthttp://php.net/manual/en/function.str-word-count.php

Пример

$test = " I love to play foodtball"; 
var_dump (substr ($test, 0, 12)); 
var_dump (wordCount ($test, 12)); 

Выходной

string ' I love to p' (length=12) 
string 'I love to play ...' (length=18) 

Вы можете увидеть один более читаемым, чем другой

Функция Использовано

function wordCount($str, $max, $surffix = "...") { 
    $total = 0; 
    $words = str_word_count ($str, 1); 
    $output = ""; 
    foreach ($words as $word) { 
     $total += strlen ($word); 
     if ($max < $total) 
      break; 
     $output .= $word . " "; 
    } 
    $output .= $surffix ; 
    return trim ($output); 
}