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

Форум PHP

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

 

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

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

тема: Размер переменной (объем) в Кб
 
 автор: neokortex   (01.07.2009 в 12:27)   письмо автору
 
 

Да.
Как узнать размер информации содержащейся в переменной в килобайтах?

Задача такая:
В переменной содержится информация (текст). Если текст по объему превышает 32 Кб, надо разделить его на части равные 32Кб (или чуть меньше). Сколько будет частей текста мы тоже не знаем, естесственно.

Подскажите хотябы в какую сторону думать.

  Ответить  
 
 автор: sim5   (01.07.2009 в 13:17)   письмо автору
 
   для: neokortex   (01.07.2009 в 12:27)
 

А в какой кодировке текст?

  Ответить  
 
 автор: neokortex   (01.07.2009 в 13:41)   письмо автору
 
   для: sim5   (01.07.2009 в 13:17)
 

UTF-8

  Ответить  
 
 автор: ols   (01.07.2009 в 14:52)   письмо автору
 
   для: neokortex   (01.07.2009 в 13:41)
 

Например
<?
$var 
"текст в utf";
$str strlen($var);
echo 
$str 1024;
?>

  Ответить  
 
 автор: nikita2206   (01.07.2009 в 15:16)   письмо автору
 
   для: ols   (01.07.2009 в 14:52)
 

для многобайтовых кодировок существуют соответственные функции, в данном случае mb_strlen

  Ответить  
 
 автор: ols   (01.07.2009 в 15:54)   письмо автору
 
   для: nikita2206   (01.07.2009 в 15:16)
 

Вприниципе да, только возможно подключить соответсвующую библиотеку, в моем случае это было так.

  Ответить  
 
 автор: sim5   (01.07.2009 в 15:44)   письмо автору
 
   для: ols   (01.07.2009 в 14:52)
 

$str * 1024; - это как понимать? Один символ в строке, это один байт, а килобайтах это будет:
strlen($var)/1024.

  Ответить  
 
 автор: ols   (01.07.2009 в 15:51)   письмо автору
 
   для: sim5   (01.07.2009 в 15:44)
 

Ссори, опечатался!

  Ответить  
 
 автор: sim5   (01.07.2009 в 15:45)   письмо автору
 
   для: neokortex   (01.07.2009 в 13:41)
 

Может лучше строку делить не по килобайтам, а по смыслу?

  Ответить  
 
 автор: neokortex   (01.07.2009 в 15:49)   письмо автору
 
   для: sim5   (01.07.2009 в 15:45)
 

в моем случае лучше по килобайтам, т. к. эти части текста будут обрабатываться функцией, а потом опять "собираться в одно".
Прсто функция хавает не более 32 кб текста.

А как это можно сделать? Разделить в смысле

  Ответить  
 
 автор: sim5   (01.07.2009 в 16:11)   письмо автору
 
   для: neokortex   (01.07.2009 в 15:49)
 

Ну для Win1251, каждый символ это 1 байт, а UTF-8 на 1 символ несколько байт. Не развалится ли ваш текст при таком разделении и последующей обработке?

  Ответить  
 
 автор: werd   (01.07.2009 в 16:45)   письмо автору
 
   для: sim5   (01.07.2009 в 16:11)
 

В утф8 один символ два байта. Но вот стандартные символы кажись один байт.

  Ответить  
 
 автор: werd   (01.07.2009 в 16:51)   письмо автору
 
   для: neokortex   (01.07.2009 в 12:27)
 

mb_strlen хреново работает. Вообщё вся проблема в том что пхп пока плоха с утф работает.
Вывод.
1. Применять вин кодировку.
2. Ту самую функцию на 32 байта переделать.
3. Ну это так чисто теоретически, и как говорится через жопу- сохранить текст в файл и с помощью функ файловой системы получить размер.
4. И наконец последне наверно вам не подойдёт это хорошо посмотреть хелп к мультистринг функциям.

  Ответить  
 
 автор: sim5   (01.07.2009 в 17:34)   письмо автору
 
   для: werd   (01.07.2009 в 16:51)
 

Не надо ничего сохранять. И для UTF strlen(var)/1024 вернет размер.

  Ответить  
 
 автор: werd   (01.07.2009 в 18:00)   письмо автору
 
   для: sim5   (01.07.2009 в 17:34)
 

Попробуй. Я с этим постояно вожусь.
Только придержись дбух моментов.
1. Кодпэйж утф8
2. Кодировка файла скрипта утф8.
Затем возьми какой нить не стандартный язык и сделай вычисление. Получишь в два раза больше длину!

  Ответить  
 
 автор: neokortex   (01.07.2009 в 18:24)   письмо автору
 
   для: werd   (01.07.2009 в 18:00)
 

я в принципе решил эту проблему у меня теперь проблема с preg_match.

  Ответить  
 
 автор: Trianon   (01.07.2009 в 19:33)   письмо автору
 
   для: werd   (01.07.2009 в 18:00)
 

Не надо тормозить - в два раза большая и нужна.
Человека интетесовала не длина в символах, а размер в байтах.

  Ответить  
 
 автор: werd   (01.07.2009 в 20:16)   письмо автору
 
   для: Trianon   (01.07.2009 в 19:33)
 

Да пожалуй торможу. Но всеравно ой на 32 не порежит.

  Ответить  
 
 автор: GeorgeIV   (01.07.2009 в 22:49)   письмо автору
 
   для: werd   (01.07.2009 в 16:51)
 

mb_strlen возвращает длину в СИМВОЛАХ, а не байтах. Она отличается только тем, что можно указать, с какой кодировкой вы работаете (хотя я не вижу в этом смысла, если возвращается все равно количество символов в строке, а не байт)
int mb_strlen ( string str [, string encoding] )


mb_strlen() returns number of characters in string str having character encoding encoding. A multi-byte character is counted as 1. 

encoding is character encoding for str. If encoding is omitted, internal character encoding is used. 

  Ответить  
 
 автор: werd   (01.07.2009 в 23:04)   письмо автору
 
   для: GeorgeIV   (01.07.2009 в 22:49)
 

Да, признаю ступил.

Кстати может вы знаете почему эта функци и мб_субстр плохо работают с ивритом да и с русским. Просто всё делаю на ютф8 и этот недостаток ограничивает.

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

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