|
|
|
| Да.
Как узнать размер информации содержащейся в переменной в килобайтах?
Задача такая:
В переменной содержится информация (текст). Если текст по объему превышает 32 Кб, надо разделить его на части равные 32Кб (или чуть меньше). Сколько будет частей текста мы тоже не знаем, естесственно.
Подскажите хотябы в какую сторону думать. | |
|
|
|
|
|
|
|
для: neokortex
(01.07.2009 в 12:27)
| | А в какой кодировке текст? | |
|
|
|
|
|
|
|
для: sim5
(01.07.2009 в 13:17)
| | UTF-8 | |
|
|
|
|
|
|
|
для: neokortex
(01.07.2009 в 13:41)
| | Например
<?
$var = "текст в utf";
$str = strlen($var);
echo $str * 1024;
?>
|
| |
|
|
|
|
|
|
|
для: ols
(01.07.2009 в 14:52)
| | для многобайтовых кодировок существуют соответственные функции, в данном случае mb_strlen | |
|
|
|
|
|
|
|
для: nikita2206
(01.07.2009 в 15:16)
| | Вприниципе да, только возможно подключить соответсвующую библиотеку, в моем случае это было так. | |
|
|
|
|
|
|
|
для: ols
(01.07.2009 в 14:52)
| | $str * 1024; - это как понимать? Один символ в строке, это один байт, а килобайтах это будет:
strlen($var)/1024. | |
|
|
|
|
|
|
|
для: sim5
(01.07.2009 в 15:44)
| | Ссори, опечатался! | |
|
|
|
|
|
|
|
для: neokortex
(01.07.2009 в 13:41)
| | Может лучше строку делить не по килобайтам, а по смыслу? | |
|
|
|
|
|
|
|
для: sim5
(01.07.2009 в 15:45)
| | в моем случае лучше по килобайтам, т. к. эти части текста будут обрабатываться функцией, а потом опять "собираться в одно".
Прсто функция хавает не более 32 кб текста.
А как это можно сделать? Разделить в смысле | |
|
|
|
|
|
|
|
для: neokortex
(01.07.2009 в 15:49)
| | Ну для Win1251, каждый символ это 1 байт, а UTF-8 на 1 символ несколько байт. Не развалится ли ваш текст при таком разделении и последующей обработке? | |
|
|
|
|
|
|
|
для: sim5
(01.07.2009 в 16:11)
| | В утф8 один символ два байта. Но вот стандартные символы кажись один байт. | |
|
|
|
|
|
|
|
для: neokortex
(01.07.2009 в 12:27)
| | mb_strlen хреново работает. Вообщё вся проблема в том что пхп пока плоха с утф работает.
Вывод.
1. Применять вин кодировку.
2. Ту самую функцию на 32 байта переделать.
3. Ну это так чисто теоретически, и как говорится через жопу- сохранить текст в файл и с помощью функ файловой системы получить размер.
4. И наконец последне наверно вам не подойдёт это хорошо посмотреть хелп к мультистринг функциям. | |
|
|
|
|
|
|
|
для: werd
(01.07.2009 в 16:51)
| | Не надо ничего сохранять. И для UTF strlen(var)/1024 вернет размер. | |
|
|
|
|
|
|
|
для: sim5
(01.07.2009 в 17:34)
| | Попробуй. Я с этим постояно вожусь.
Только придержись дбух моментов.
1. Кодпэйж утф8
2. Кодировка файла скрипта утф8.
Затем возьми какой нить не стандартный язык и сделай вычисление. Получишь в два раза больше длину! | |
|
|
|
|
|
|
|
для: werd
(01.07.2009 в 18:00)
| | я в принципе решил эту проблему у меня теперь проблема с preg_match. | |
|
|
|
|
|
|
|
для: werd
(01.07.2009 в 18:00)
| | Не надо тормозить - в два раза большая и нужна.
Человека интетесовала не длина в символах, а размер в байтах. | |
|
|
|
|
|
|
|
для: Trianon
(01.07.2009 в 19:33)
| | Да пожалуй торможу. Но всеравно ой на 32 не порежит. | |
|
|
|
|
|
|
|
для: 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.
|
| |
|
|
|
|
|
|
|
для: GeorgeIV
(01.07.2009 в 22:49)
| | Да, признаю ступил.
Кстати может вы знаете почему эта функци и мб_субстр плохо работают с ивритом да и с русским. Просто всё делаю на ютф8 и этот недостаток ограничивает. | |
|
|
|