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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Трабл с 1 буквой в utf8
 
 автор: aetern   (11.10.2009 в 18:48)   письмо автору
 
 

Сайт в UTF8.
При выполнении функции substr():
if(strlen($last['text']) > 230) $last['text'] = substr($last['text'], 0, 230)


последняя буква в $last['text'] отображается в виде вопросительного знака (т.е. не в той кодировке).
С чем это может быть связано и как решить проблему?
Заранее спасибо.

  Ответить  
 
 автор: cheops   (11.10.2009 в 20:14)   письмо автору
 
   для: aetern   (11.10.2009 в 18:48)
 

Дело в том, что эти функции не предназначены для работы с многобайтными кодировками, лучше воспользоваться функциями из расширения mbstring(). Или, если эти функци не доступны, преобрзовать текст из кодировки utf8, скажем в cp1251, а потом, после обработки - обратно.

  Ответить  
 
 автор: aetern   (11.10.2009 в 20:42)   письмо автору
 
   для: cheops   (11.10.2009 в 20:14)
 

Решил вопрос разрезанием по словам:
<?php
function cutstring$stranb$lengthanb$theend="..." )
{
if (
strlen($stranb)>30) {$text2=substr($stranb0$lengthanb);
$words=explode(" "$text2);
$words=array_reverse($words);
array_splice($words,0,1);
$alexxnb=0;
for (
$i=0$i<count($words); $i++) {
$i=$i-$alexxnb;
if (
substr($words[$i], -1)=="," OR substr($words[$i], -1)=="." OR substr($words[$i], -1)==":" OR substr($words[$i], -1)==";") {$words[$i]=substr($words[$i],0strlen($words[$i])-1);};
$wrd=$words[$i];
if (
strlen($wrd)<4){
array_splice($words,$i,1);$alexxnb=1;
} else {
$i=1985;};
};
$mwords="";
$words=array_reverse($words);
for (
$i=0$i<count($words); $i++) {
 
$mwords=$mwords.$words[$i];
 if (
$i!=count($words)-1) {$mwords=$mwords." ";} else {$mwords=$mwords.$theend;};
};
} else {
$mwords=$stranb;};
return 
$mwords;
}
?>

  Ответить  
 
 автор: Trianon   (11.10.2009 в 22:12)   письмо автору
 
   для: cheops   (11.10.2009 в 20:14)
 

>Дело в том, что эти функции не предназначены для работы с многобайтными кодировками,
>лучше воспользоваться функциями из расширения mbstring(). Или, если эти функци не доступны, ...

тогда воспользоваться preg_match с модификатором u

а вот
> преобрзовать текст из кодировки utf8, скажем в cp1251, а потом, после обработки - обратно.
приведет к тому, что все символы за пределами множества 1251 будут потеряны.

  Ответить  
Rambler's Top100
вверх

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