Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Проблема substr

Сообщения:  [1-9] 

 
 автор: abman   (18.04.2008 в 04:54)   письмо автору
 
   для: waptanet   (17.04.2008 в 20:51)
 

Большое спасибо, всем.

   
 
 автор: waptanet   (17.04.2008 в 20:51)   письмо автору
 
   для: abman   (17.04.2008 в 04:10)
 

Вот нашёл хорошую функцию

function utf8_substr($str, $offset, $length = null)
{
    #в начале пробуем найти стандартные функции
    if (function_exists('iconv_substr')) return iconv_substr($str, $offset, $length, 'utf-8'); #(PHP 5)
    if (function_exists('mb_substr')) return mb_substr($str, $offset, $length, 'utf-8'); #(PHP 4 >= 4.0.6, PHP 5)
    #однократные паттерны повышают производительность!
    preg_match_all('/(?>[\x09\x0A\x0D\x20-\x7E]           # ASCII
                      | [\xC2-\xDF][\x80-\xBF]            # non-overlong 2-byte
                      |  \xE0[\xA0-\xBF][\x80-\xBF]       # excluding overlongs
                      | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
                      |  \xED[\x80-\x9F][\x80-\xBF]       # excluding surrogates
                      |  \xF0[\x90-\xBF][\x80-\xBF]{2}    # planes 1-3
                      | [\xF1-\xF3][\x80-\xBF]{3}         # planes 4-15
                      |  \xF4[\x80-\x8F][\x80-\xBF]{2}    # plane 16
                     )
                    /xs', $str, $m);
    if ($length !== null) $a = array_slice($m[0], $offset, $length);
    else $a = array_slice($m[0], $offset);
    return implode('', $a);
}

   
 
 автор: q'n'd   (17.04.2008 в 14:36)   письмо автору
 
   для: abman   (17.04.2008 в 04:10)
 

попробуйте это

$title = preg_replace('#^(.{0,36}).*#su', '$1', $title);

   
 
 автор: abman   (17.04.2008 в 04:10)   письмо автору
 
   для: q'n'd   (16.04.2008 в 22:59)
 

if (mb_strlen($title, 'utf-8') > 36) { 
 echo $title = mb_substr($title,0,36, 'utf-8');  
}

эти функции не работают, может есть другое решения

   
 
 автор: q'n'd   (16.04.2008 в 22:59)   письмо автору
 
   для: abman   (16.04.2008 в 20:46)
 

текст в массиве $cat_ids в кодировке utf-8 ?

имел ввиду что-то вроде приделать к этому прессу вместо этого :
if (strlen($title) > 30) { $title = substr($title,0,36); }


это :
if (mb_strlen($title, 'utf-8') > 36) {
 echo $title = mb_substr($title,0,36, 'utf-8'); 
}

если утф-8

   
 
 автор: abman   (16.04.2008 в 20:46)   письмо автору
 
   для: AcidTrash   (16.04.2008 в 17:28)
 

вот польностью кусок (это шаблон вордпресса)
<h2> Статьи</h2>


 <?php
 $cat_ids 
get_all_category_ids();
    foreach ( 
$cat_ids as $cat_id ) : ?>
        <p class="allpost_link"><a href="<?php echo get_category_link($cat_id); ?>"><?php echo get_cat_name($cat_id); ?></a></p>
        <?php $lastposts get_posts('numberposts=all&category='.$cat_id);
             foreach(
$lastposts as $post) :
            
setup_postdata($post);
            
$title get_the_title();
            if (
strlen($title) > 30) { $title substr($title,0,36); }
         
?>
             <p class="allpost_post"><a href="<?php the_permalink(); ?>" ><?php echo $title ?></a><p>
        <?php endforeach; ?>
 <?php  endforeach; ?>

</div> 

   
 
 автор: q'n'd   (16.04.2008 в 17:58)   письмо автору
 
   для: AcidTrash   (16.04.2008 в 17:28)
 

похоже кодировка многобайтная.

если включены Multibyte String Functions
mb_substr ( string str, int start [, int length [, string encoding]] )

   
 
 автор: AcidTrash   (16.04.2008 в 17:28)   письмо автору
 
   для: abman   (16.04.2008 в 17:03)
 

По этой строчке судить не о чем, смоделировать ситуацию невозможно => решения нет.
Тут можно гадать и гадать.

   
 
 автор: abman   (16.04.2008 в 17:03)   письмо автору
 
 

Помогите найти лекарства:
$title = substr($title,0,36);
В конце строк появляется черный ромбик с вопросом, как избавится от него.

   

Сообщения:  [1-9] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования