Поддержка Проблемы и решения Кракозябры при обрезке текста

  • Собственно, есть сайт http://onlinekredit-zayavka.ru/
    В слайдере и блоках ниже при обрезке текста статьи перед троеточием появляются «кракозябры». Их нужно убрать. Перерыл весь код, не могу понять в чем проблема.

    Вот кусок кода, который за это отвечает:

    <?php
    $content = get_the_content();
    $content = strip_tags($content);
    echo substr($content, 0, 219). '...';
    ?>

    Может, проблема с кодировкой? Прошу помощи

Просмотр 11 ответов — с 1 по 11 (всего 11)
  • Модератор Yuri

    (@yube)

    Проблема с использованием substr, которая ничего не знает про мультибайтные кодировки. Поменять на mb_substr($content, 0, 219, 'UTF-8')

    Спасибо, поменял, но теперь весь текст под заголовком и вовсе пропал. Не подскажете, как его вернуть обратно? Заранее спасибо.

    Модератор Yuri

    (@yube)

    echo не забыли?

    Забыл, как раз его прописываю. Спасибо. Текст появился. Только сайт начал долго грузится. mb_substr не влияет на скорость сайта? или это просто совпадение и у хостинга проблемы?

    Вопрос исчерпан, проблемы на хостинге. Другие сайты тоже тормозят. Спасибо за помощь. Тему считаю решенной.

    Думал, что все. Оказывается, что нет. Хотел по аналогии в коде слайдера прописать, но не тут то было. Вот код:

    <?php $short_title = substr(the_title('','',True),0,35);
    echo $short_title; if (strlen($short_title) >50){ echo '...'; } ?>

    Подскажите, пожалуйста, как здесь прописать? Заранее спасибо

    Модератор Yuri

    (@yube)

    Аналогично

    <?php $short_title = mb_substr(the_title('','',True),0,35,'UTF-8');
    echo $short_title; if (mb_strlen($short_title,'UTF-8') >50){ echo '...'; } ?>

    Только не понятно, чего в одном месте 35, а в другом 50. По идее должны быть одинаковые числа.

    К сожалению, данный код не помог. Ничего не изменилось.
    PS. насчет разных цифр, то я экспериментировал с длиной заголовка) забыл одинаковые прописать.

    Если что, вот весь код слайдера:

    <?php
    /**
     * Theme:  	  silverOrchid
     * Theme URL: http://gazpo.com/2012/04/silverorchid
     * Created:   April 2012
     * Author:    Sami Ch.
     * URL: 	  http://gazpo.com
     *
     **/
    	$gazpo_settings = get_option( 'gazpo_options');
    	$slider_cat_id = $gazpo_settings['gazpo_slider_category'];
    	//if no category is selected for slider, show latest posts
    	if ( $slider_cat_id == 0 ) {
    		$post_query = 'posts_per_page=4';
    	} else {
    		$post_query = 'cat='.$slider_cat_id.'&posts_per_page=4';
    	}
    ?>
    
    <div id="gazpo-slider" >
    		<ul class="ui-tabs-nav ui-tabs-selected">
    			<?php query_posts( $post_query ); ?>
    			<?php if( have_posts() ) : while( have_posts() ) : the_post(); ?>
    	        <li class="ui-tabs-nav-item" id="nav-fragment-<?php echo $post->ID; ?>">
    			<a href="#fragment-<?php echo $post->ID; ?>">
    				<?php the_post_thumbnail( 'thumbnail', array('class' => 'slider_thumb') ); ?>
    				<span class="title">
    						<?php $short_title = substr(the_title('','',False),0,59);
    						echo $short_title; if (strlen($short_title) >50){ echo '...'; } ?>
    				</span>
    				<br />
    				<span class="date"><?php the_time('j F'); ?></span>
    			</a>
    			</li>
    			<?php endwhile; endif;?>
    			<?php wp_reset_query();?>
    	    </ul>
    
    		<?php query_posts( $post_query ); ?>
    		<?php if( have_posts() ) : while( have_posts() ) : the_post(); ?>
    		<div id="fragment-<?php echo $post->ID; ?>" class="ui-tabs-panel ui-tabs-hide" style="">
    			<?php the_post_thumbnail( 'large', array('class' => 'slider_image') ); ?>
    			 <div class="info" >
    				<h2>
    					<a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title(); ?>">
    					<?php $short_title = mb_substr(the_title('','',True),0,35,'UTF-8');
    echo $short_title; if (mb_strlen($short_title,'UTF-8') >35){ echo '...'; } ?>
    					</a>
    				</h2>				
    
    			 </div>
    	    </div>
    
    			<?php endwhile; endif;?>
    			<?php wp_reset_query();?>
    </div>

    Продолжаю диалог сам с собой))) Разобрался со слайдером, не там прописывал, оказывается. Только теперь слово обрезается и не показывается троеточие, хотя в коде оно вроде есть. Подскажите, как его прописать? На данный момент у меня такой кусок кода:

    <?php $short_title = mb_substr(the_title('','',False),0,30,'UTF-8');
    echo $short_title; if (mb_strlen($short_title,'UTF-8') >30) { echo '...';} ?>

    Модератор Yuri

    (@yube)

    Код почитайте — поймете, почему нет трех точек (троеточие — это другой символ;)). Сначала получаем $short_title путем обрезания титлы до 30 букв, а затем проверяем, не длиннее ли $short_title 30 букв? 🙂

    Можно как-то так модифицировать

    <?php
      $full_title = the_title('','',False);
      $short_title = mb_substr($full_title,0,30,'UTF-8');
      echo $short_title;
      if (mb_strlen($full_title,'UTF-8') >30) echo '...';
    ?>

    Благодарю, все настроил.

Просмотр 11 ответов — с 1 по 11 (всего 11)
  • Тема «Кракозябры при обрезке текста» закрыта для новых ответов.