Знак вопроса в конце длинных сообщений

B
На сайте с 03.08.2007
Offline
82
644

Есть скрипт, который выводит список последних тем с форума, но если название темы слишком длинное, то в конце названия ставится знак вопроса (см. аттач). Поиск по сети ответа для решения проблемы не дал, может здесь кто-нибудь ведует?

Код скрипта:

<?php

//Префикс таблицы с IPB
$prefix = '';
//Сколько тем выводить
$num = ;
//Сколько символов оставить в названии темы после урезания
$topic_num_sym = ;
//Форумы, которые мы не трогаем
//$forumexclude = '';
//Сервер БД на котором висит база форума
$host="localhost";
//Имя БД
$database1="";
//Логин БД
$username="";
//Пароль БД
$password="";

$ipb_db = mysql_pconnect($host, $username, $password);
mysql_select_db($database1, $ipb_db);
$rd = "SET CHARACTER SET utf8";

if (!$result = mysql_query($rd))
{
echo "Не могу подключиться к БД\n";
}

$resultf = mysql_query("SELECT tid, title, description, posts FROM ".$prefix."topics WHERE forum_id ORDER BY last_post DESC LIMIT $num",$ipb_db) or die(mysql_error());
$row_resultf = mysql_fetch_assoc($resultf);
$totalRows_resultf = mysql_num_rows($resultf);
do {
$topicstrip = $row_resultf['title'];
if (strlen($topicstrip) > $topic_num_sym)
{
$topicstrip = substr($topicstrip,0,$topic_num_sym);
$topicstrip = $topicstrip."...";
}
//$last_date = date($time,$row_resultf['last_post']);
$bt.= "- <a title=\"".$row_resultf['description']."\" href=\"forum/index.php?showtopic=".$row_resultf['tid']."&view=getlastpost\">$topicstrip</a>&nbsp;";
$bt.= "(".$row_resultf['posts'].")<br />";

} while($row_resultf = mysql_fetch_assoc($resultf));

mysql_free_result($resultf);

echo $bt;

?>
png 2012-01-09_124904.png
ДП
На сайте с 23.11.2009
Offline
203
#1

Замените

$topicstrip = substr($topicstrip,0,$topic_num_sym);

на

$topicstrip = mb_substr($topicstrip,0,$topic_num_sym);

и

if (strlen($topicstrip) > $topic_num_sym)

на

if (mb_strlen($topicstrip) > $topic_num_sym)

Проблема в том, что у вас используются функции для работы с однобайтными кодировками, а данные у вас в utf-8, где символ занимает два байта - в результате некоторые символы режутся посередине и получаются такие знаки.

B
На сайте с 03.08.2007
Offline
82
#2

Заменил strlen на mb_strlen, но, к сожалению, результата это не дало.

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#3
bncom:
Заменил strlen на mb_strlen, но, к сожалению, результата это не дало.

Сам файл сохранён в UTF8?

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
B
На сайте с 03.08.2007
Offline
82
#4

Ушел, и сразу же вспомнил, что включен кэш, поэтому изменений и не видно. Проверил - так оно и есть.

Большое спасибо за помощь!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий