|
|
|
| Сайт в UTF8.
При выполнении функции substr():
if(strlen($last['text']) > 230) $last['text'] = substr($last['text'], 0, 230)
|
последняя буква в $last['text'] отображается в виде вопросительного знака (т.е. не в той кодировке).
С чем это может быть связано и как решить проблему?
Заранее спасибо. | |
|
|
|
|
|
|
|
для: aetern
(11.10.2009 в 18:48)
| | Дело в том, что эти функции не предназначены для работы с многобайтными кодировками, лучше воспользоваться функциями из расширения mbstring(). Или, если эти функци не доступны, преобрзовать текст из кодировки utf8, скажем в cp1251, а потом, после обработки - обратно. | |
|
|
|
|
|
|
|
для: cheops
(11.10.2009 в 20:14)
| | Решил вопрос разрезанием по словам:
<?php
function cutstring( $stranb, $lengthanb, $theend="..." )
{
if (strlen($stranb)>30) {$text2=substr($stranb, 0, $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],0, strlen($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;
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(11.10.2009 в 20:14)
| | >Дело в том, что эти функции не предназначены для работы с многобайтными кодировками,
>лучше воспользоваться функциями из расширения mbstring(). Или, если эти функци не доступны, ...
тогда воспользоваться preg_match с модификатором u
а вот
> преобрзовать текст из кодировки utf8, скажем в cp1251, а потом, после обработки - обратно.
приведет к тому, что все символы за пределами множества 1251 будут потеряны. | |
|
|
|