2012-03-09 1 views
1

Я пытаюсь усечь текст, полученный с помощью mysql_fetch_array, но по какой-то причине strlen не может быть рассчитан правильно. Мой код выглядит следующим образом:Как усечь текст, полученный из базы данных MySQL, и добавить эллипсы?

while($row = mysql_fetch_array($result)) { 
     $text = $row['text']; 
     $moretext = $row['moretext']; 
      if (strlen($text) > 210 || strlen($moretext) > 210) { 
       $text = substr($text, 0, 210)."..."; 
       $moretext = substr($moretext, 0, 210)."..."; 
      } 
    } 

Как заставить это работать так, что он вычисляет длину текста и присоединяет эллипсы, если он превышает указанную сумму, в данном случае 210 символов.

+2

Какой результат вы получаете, что заставляет вас поверить, что strlen не может быть рассчитан правильно? Кроме того, в каком формате находятся столбцы «text» и «moretext» таблицы mysql? –

+0

@GabrielRoth это просто текст UTF8. Я не уверен, правильно ли вычисляется 'strlen', поскольку он добавляет эллипсы, даже если текст находится под указанной суммой. Самая большая проблема заключается в том, что он автоматически добавляет эллипсы, если их всего 20 символов, но текст содержит знак вопроса. – Daphne

+0

Вы видели многобайтовую функцию strlen php [mb_strlen()] (http://www.php.net/manual/en/function.mb-strlen.php)? –

ответ

1

Отмечая, что вы проверяете против длины $ текста или длины $ moretext, если либо из них имеет длину более 210, эллипсы будут добавлены к как. Предполагая, что это не желаемое поведение, вам нужно разделить это на два оператора if.

0

Используйте это:

$text = $row['text']; 
$moretext = $row['moretext']; 

$text = strlen($text) <= 210 ? $text : substr($text, 0, 210) . "..."; 
$moretext = strlen($moretext) <= 210 ? $moretext : substr($moretext, 0, 210) . "..."; 
0

Может быть, вы должны позволить MySQL сделать усечение для вас

Вы можете использовать MySQL's IF function

select 
    IF(LENGTH(moretext) > 210,CONCAT(LEFT(moretext,210),'...'),moretext) moretext 
from mip where active = 1; 

или

select 
    IF(LENGTH(moretext) > 210,CONCAT(SUBSTR(moretext,1,210),'...'),moretext) moretext 
from mip where active = 1; 

T когда вы выполните mysql_fetch_array, поле уже настроено для вас.

Дайте ему попробовать !!!

Смежные вопросы