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

Форум PHP

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

 

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

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

тема: wordwrap в utf-8
 
 автор: Vantuz   (19.09.2006 в 23:49)   письмо автору
 
 

Подскажите как можно обойти одну неприятность при использовании этой функции в кодировке utf-8 ,дело в том что в utf -8 знак имеет 2 байта, при разбивке блока текста или длинного слова wordwrap делит побайтово и режет крайнюю букву оставляя квадратик, который вылазиет очень некстати

   
 
 автор: to4kaRU   (20.09.2006 в 11:33)   письмо автору
 
   для: Vantuz   (19.09.2006 в 23:49)
 

Как насчет того, чтобы посмотреть документацию на php.net? Там много полезных комментариев. В частности оттуда:


<?php

function utf8_wordwrap($str,$len,$what){
# usage: utf8_wordwrap("text",3,"<br>");
# by tjomi4`, thanks to SiMM.
# www.yeap.lv
$from=0;
$str_length preg_match_all('/[\x00-\x7F\xC0-\xFD]/'$str$var_empty);
$while_what $str_length $len;
while(
$i <= round($while_what)){
$string preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
                       
'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
                       
'$1',$str);
$total .= $string.$what;
$from $from+$len;
$i++;
}
return 
$total;
}
?>

   
 
 автор: Vantuz   (21.09.2006 в 01:59)   письмо автору
 
   для: to4kaRU   (20.09.2006 в 11:33)
 

Все нормально слова разбивает как нужно, но все равно есть проблема, теперь уже латинские символы или цифры, тоесть однобайтные ,обрабатываются некорректно

   
 
 автор: Саня   (21.09.2006 в 02:12)   письмо автору
 
   для: Vantuz   (21.09.2006 в 01:59)
 

У вас iconv установлен? Можно при помощи него сконвертить текст в CP1251, "отвордврапить", а затем обратно в UTF перегнать.

   
 
 автор: Vantuz   (21.09.2006 в 02:45)   письмо автору
 
   для: Саня   (21.09.2006 в 02:12)
 

У меня может и стоит, но мне нужна эта функция для общественного движка который будут и уже устанавливают на многих бесплатных хостингах, так что нет, а писать функцию ручной перекодировки я считаю наверно лишней это будет подгружать сервер при частых обращениях

   
 
 автор: Vantuz   (21.09.2006 в 02:45)   письмо автору
 
   для: Саня   (21.09.2006 в 02:12)
 

У меня может и стоит, но мне нужна эта функция для общественного движка который будут и уже устанавливают на многих бесплатных хостингах, так что нет, а писать функцию ручной перекодировки я считаю наверно лишней это будет подгружать сервер при частых обращениях

   
 
 автор: cheops   (21.09.2006 в 13:33)   письмо автору
 
   для: Vantuz   (21.09.2006 в 02:45)
 

Возможно вам будет интересна тема по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=11065.

   
 
 автор: Vantuz   (21.09.2006 в 14:49)   письмо автору
 
   для: cheops   (21.09.2006 в 13:33)
 

Ну вот представьте гостевую книгу каждый раз перед отправкой собщения необходимю будет прогнать текст в кодировку win, затем обраотать wordwrap , затем вернуть в utf при этом там всякие stripslashes, htmlspecialchars,trim и т д, и лишь только после этого записать в файл, мне кажется если в гостевой будет больше 50 чел. онлайн, то это будет жутко тормозить или я ошибаюсь?

   
 
 автор: Саня   (21.09.2006 в 15:59)   письмо автору
 
   для: Vantuz   (21.09.2006 в 14:49)
 

Вы ошибаетесь.

   
 
 автор: cheops   (21.09.2006 в 19:10)   письмо автору
 
   для: Vantuz   (21.09.2006 в 14:49)
 

Любой MySQL-запрос или операция с файлом выволняется дольше чем преобразование кодировки. Беспокоится о скорости работы приложения следует только тогда, когда такая проблема возникает, в современных компьютерах забота о производительности происходит на можествах уровнях: на уровне, процессора, операционной системы, языка программирования и т.п. угадать заранее что какой код будет выполняться быстро, а какой нет практически не реально, даже для эксперта, именно поэтому сейчас ориентируются не на эмпирические знания, а на профилировщики (программы, определяющие узкие места в коде).

   
 
 автор: Unkind™   (21.09.2006 в 20:32)   письмо автору
 
   для: Vantuz   (21.09.2006 в 14:49)
 

>Ну вот представьте гостевую книгу каждый раз перед отправкой собщения необходимю будет прогнать текст в кодировку win, затем обраотать wordwrap , затем вернуть в utf при этом там всякие stripslashes, htmlspecialchars,trim и т д, и лишь только после этого записать в файл, мне кажется если в гостевой будет больше 50 чел. онлайн, то это будет жутко тормозить или я ошибаюсь?

А все 50 человек будут одновременно посылать запросы на добавление поста в книгу? Прям DDoS...:))
У меня в чате постоянно из UTF-8 в Windows-1251 и обратно перекодируется текст, еще несколько фукнций и все нормально. И время выполнения только за счет SQL-запросов увеличивается в основном...

> У меня может и стоит, но мне нужна эта функция для общественного движка который будут и уже устанавливают на многих бесплатных хостингах, так что нет, а писать функцию ручной перекодировки я считаю наверно лишней это будет подгружать сервер при частых обращениях

P.S. Да не будет "подгружать сервер при частых обращениях". Замерьте сами. :)

P.P.S. Насколько я знаю Вы пишите всё на файлах...Не пора ли на MySQL переходить? :) Не лишнее будет.

   
 
 автор: Vantuz   (21.09.2006 в 21:19)   письмо автору
 
   для: Unkind™   (21.09.2006 в 20:32)
 

Спасибо, наверно так и сделаю с прмошью перекодировки, ?Зачем мускул? Мне и файлов хватает, с ними работать для меня удобней

   
Rambler's Top100
вверх

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