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

Тема в разделе "PHP", создана пользователем Axom, 5 окт 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Axom

    Axom

    Регистр.:
    25 апр 2007
    Сообщения:
    320
    Симпатии:
    94
    Есть функция:
    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 не хватает для этого... :(
     
    Kloster нравится это.
  2. IgorA100

    IgorA100 Постоялец

    Регистр.:
    3 янв 2009
    Сообщения:
    62
    Симпатии:
    31
    Я не знаю, что у Вас там выполняет скрипт, но:
    1. substr($CURATTACH2[title],0,30) - вернет первые 30 символов из $CURATTACH2[title]
    2. Если в $CURATTACH2[title] кл-во символов НЕ равно 30, тогда к этому значению добавится '...' запишется в $CURATTACH2[title]и отобразится на экране.

    Что пофиксить то надо? :)
     
  3. Axom

    Axom

    Регистр.:
    25 апр 2007
    Сообщения:
    320
    Симпатии:
    94
    Да я уже в движке vbulletin прекрасную замену нашёл
    Он делает тоже самое, но код уже проще и без этого бага нет :)
    Вот полный код, может тогда понятней станет, в котором высвечивался баг описанный в первом посте:
    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. Tretiy

    Tretiy Постоялец

    Заблокирован
    Регистр.:
    10 дек 2007
    Сообщения:
    81
    Симпатии:
    9
    если кавычки нужны, то можете внутренний текст попробовать
    str_replace('&quot;', '"', $CURATTACH2[title]);
     
    Axom нравится это.
  5. Kloster

    Kloster

    Регистр.:
    22 июн 2009
    Сообщения:
    216
    Симпатии:
    12
    Это потому, что передается не такая строка, а html код, в котором кавычки заменены на &quote, вот и получается &quote111111111&quote
    и обрабатывается уже с такими символами, 30 знаков отрезается, от второй квоты кусок остается. А потом при выводе на экран первый код показывается как кавычка, а вот второй не полный, потому и показывает безобразие.
    Надо обрабатывать тогда не код, а строку - квоты преобразовать в кавычки, потом обрабатывать. Tretiy написал пример. Возможно, потом потребуется назад вернуть...
    В общем, это от задачи зависит. Ориентируйся по обстановке :)
     
Статус темы:
Закрыта.