Как исправить?

Статус
В этой теме нельзя размещать новые ответы.

Axom

Постоялец
Регистрация
25 Апр 2007
Сообщения
320
Реакции
105
Есть функция:
PHP:
$nametorr = substr($CURATTACH2[title],0,30);

if ($nametorr!=$CURATTACH2[title]) $nametorr.='...';

$CURATTACH2[title] = $nametorr;

echo $nametorr;
Так вот когда $CURATTACH2[title] равно
, именно с кавычками (т.е. 23 символа), то echo $nametorr; выдаёт:
"111111111111111111111&qu...
Если в substr значение 30 изменить на любое другое, то всё нормально.
Как пофиксить? :) У меня просто знаний в PHP не хватает для этого... :(
 
Я не знаю, что у Вас там выполняет скрипт, но:
1. substr($CURATTACH2[title],0,30) - вернет первые 30 символов из $CURATTACH2[title]
2. Если в $CURATTACH2[title] кл-во символов НЕ равно 30, тогда к этому значению добавится '...' запишется в $CURATTACH2[title]и отобразится на экране.

Что пофиксить то надо? :)
 
Да я уже в движке vbulletin прекрасную замену нашёл
fetch_trimmed_title($CURATTACH2[title],30)
Он делает тоже самое, но код уже проще и без этого бага нет :)
Вот полный код, может тогда понятней станет, в котором высвечивался баг описанный в первом посте:
PHP:
while ($arr = $db->fetch_array($res2)) 
{
    $i++;

    $ttmp=  $db->query("SELECT * FROM " . TABLE_PREFIX . "attachment WHERE info_hash='".addslashes($arr['info_hash'])."'");
    $CURATTACH = $db->fetch_array($ttmp);
    $nametorr=  $db->query("SELECT title FROM " . TABLE_PREFIX . "thread WHERE firstpostid = '".$CURATTACH[postid]."'") ;
    $CURATTACH2 = $db->fetch_array($nametorr);

$nametorr = substr($CURATTACH2[title],0,30);

if ($nametorr!=$CURATTACH2[title]) $nametorr.='...';

$CURATTACH2[title] = $nametorr;

echo $nametorr;  
        
       $sr.= "<a href=\"showthread.php?p=".$CURATTACH["postid"]."\" target=\"_blank\"><font color=blue>".$CURATTACH2[title]."</font></a>\n";

}
 
  • Заблокирован
  • #4
если кавычки нужны, то можете внутренний текст попробовать
str_replace('&quot;', '"', $CURATTACH2[title]);
 
  • Нравится
Реакции: Axom
Есть функция:
PHP:
$nametorr = substr($CURATTACH2[title],0,30);
if ($nametorr!=$CURATTACH2[title]) $nametorr.='...';
$CURATTACH2[title] = $nametorr;
echo $nametorr;
Так вот когда $CURATTACH2[title] равно , именно с кавычками (т.е. 23 символа), то echo $nametorr; выдаёт:
Если в substr значение 30 изменить на любое другое, то всё нормально.
Как пофиксить? :) У меня просто знаний в PHP не хватает для этого... :(
Это потому, что передается не такая строка, а html код, в котором кавычки заменены на &quote, вот и получается &quote111111111&quote
и обрабатывается уже с такими символами, 30 знаков отрезается, от второй квоты кусок остается. А потом при выводе на экран первый код показывается как кавычка, а вот второй не полный, потому и показывает безобразие.
Надо обрабатывать тогда не код, а строку - квоты преобразовать в кавычки, потом обрабатывать. Tretiy написал пример. Возможно, потом потребуется назад вернуть...
В общем, это от задачи зависит. Ориентируйся по обстановке :)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху