|
|
|
|
|
для: Unkind
(25.11.2007 в 23:22)
| | Так я чё-то говорю? :) В айподе существенный недостаток того, что вообще файлы только текстовые и только по 4кб.. Очень не удобно и т.д.... и т.п...
Но здесь смысл в другом - главное итог :) А итог отличный, теперь удобно книжки для айподика делать :) | |
|
|
|
|
|
|
|
для: morkovkin
(25.11.2007 в 23:17)
| | > Айпод тоже галимый редактор??
Ну раз он не может автоматически определить, что это UTF-8, а ждет только BOM, то это существенный недостаток. Даже Блокнот его уделал. А это, скажите, не показатель? | |
|
|
|
|
|
|
|
для: Unkind
(25.11.2007 в 23:14)
| | При чёт здесь редактор то?? Айпод тоже галимый редактор??
Всё, теперь всё ок :) Спасибо огромное, сейчас буду разбираться в коде :)
Ещё раз большое спасибо, оч помогли!! | |
|
|
|
|
|
|
|
для: morkovkin
(25.11.2007 в 23:02)
| | Простите, у Вас просто редакторы галимые :))) Я же говорю, всё нормально.
OK, добавляйте BOM:
<?php
set_time_limit(1);
function reduce_utf8($s)
{
for($i = strlen( $s ) - 1, $l = 0; $i > 0; $i--)
{
$ord = ord( $s[$i] );
if( $ord < 0x80 && $l == 0 )
{
return $s;
}
if( $ord == 0xFE || $ord == 0xFF )
{
/* "The octet values FE and FF never appear", RFC 2279 */
return false;
}
if( $l > 5 )
{
/* Too long character */
return false;
}
if( $ord <= 0xBF )
{
$l++;
}
else
{
break;
}
}
return substr($s, 0, $i);
}
$filename = 'text.txt';
$dirname = 'book';
if( !is_dir( $dirname ) )
{
if( !mkdir($dirname, 0777) )
{
die( 'Could not mkdir' );
}
}
$piece = 4096;
$total = filesize($filename);
$frh = fopen($filename, 'rb');
$piece -= 3;
for($offset = 0, $i = 1; !feof($frh); $i++)
{
fseek($frh, $offset, SEEK_SET);
$fwh = fopen($dirname . '/' . $i . '.txt', 'wb');
$buffer = fread($frh, $piece);
$buffer = reduce_utf8($buffer);
if( $buffer === false )
{
echo 'Incorrect encoding';
break;
}
fwrite($fwh, substr($buffer, 0, 3) != "\xEF\xBB\xBF" ? "\xEF\xBB\xBF" . $buffer : $buffer);
fclose($fwh);
$offset = ftell($frh) - ($piece - strlen( $buffer ));
}
fclose($frh);
?>
|
| |
|
|
|
|
 5.1 Кб |
|
|
для: Unkind
(25.11.2007 в 22:59)
| | Нет, всё-таки ВордПад всё правильно показывает.
Первый файл открывает правильно, всё читается, а остальные нет.
Прикрепил архив. | |
|
|
|
|
|
|
|
для: morkovkin
(25.11.2007 в 22:56)
| | Еще раз: в какой кодировке Вы хотите получить текст? Меня только это интересует. Вы говорите, что проверяете через WordPad кодировку. Какую ожидаете увидеть?
> Вот пример:
Это UTF-8. WordPad его не понимает (у меня). А если у Вас понимает ТОЛЬКО первый файл, то там BOM. Проверьте на Вашем iPod, а не в WordPad. | |
|
|
|
|
|
|
|
для: Unkind
(25.11.2007 в 22:46)
| | Вы про что? Я это писал про айпод - это правда. Но для теста, чтоб не нагружать машину, делать ради теста почти каждую минутут по 300 файликов, я просто там поменял размер, чтоб быстро делал 3 файла. И проверял через ВордПад кодировку..
Вобщем, кодировка не меняется, что делать то? :)
p.s. Ааа, тоесть я там хотел сказать, что UTF-8 делается только для первого файла, для остальных делается какая-то другая.. не знаю - какая...
Вот пример:
Таким образом, эксплуатируя уязвимость типа SQL-инъекция в MySQL-
сервере, нападающий может
Но через блокнот, он видится, как нормальный файл. | |
|
|
|
|
|
|
|
для: morkovkin
(25.11.2007 в 22:31)
| | Вы же сами сказали, "Он читает только файлы по 4кб и в кодировке UTF-8". Что Вы хотите? | |
|
|
|
|
|
|
|
для: Unkind
(25.11.2007 в 21:40)
| | Спасибо! Про килобайты знаю :) Это просто у меня там файл весит 1.2мб.. и для теста я его делил на 3 части..
Но проблема осталась, кодировка файлов также не меняется. Поменялась только на первый созданный файл... При открытии блокнотом, все файлы читабельны, но при открытии WordPad сразу всё становится видно. | |
|
|
|
|
|
|
|
для: morkovkin
(25.11.2007 в 20:28)
| | Я бы сделал что-то вроде
<?php
set_time_limit(1);
function reduce_utf8($s)
{
for($i = strlen( $s ) - 1, $l = 0; $i > 0; $i--)
{
$ord = ord( $s[$i] );
if( $ord < 0x80 )
{
if( $l == 0 )
{
return $s;
}
else
{
return false;
}
}
if( $ord == 0xFE || $ord == 0xFF )
{
/* "The octet values FE and FF never appear", RFC 2279 */
return false;
}
if( $l > 5 )
{
/* Too long character */
return false;
}
if( $ord <= 0xBF )
{
$l++;
}
else
{
break;
}
}
return substr($s, 0, $i);
}
$filename = 'text.txt';
$dirname = 'book';
$encoding = 'UTF-8';
if( !is_dir( $dirname ) )
{
if( !mkdir($dirname, 0777) )
{
die( 'Could not mkdir' );
}
}
$piece = 4096;
$total = filesize($filename);
$frh = fopen($filename, 'rb');
for($offset = 0, $i = 1; !feof($frh); $i++)
{
fseek($frh, $offset, SEEK_SET);
$fwh = fopen($dirname . '/' . $i . '.txt', 'wb');
$buffer = fread($frh, $piece);
$buffer = reduce_utf8($buffer);
if( $buffer === false )
{
echo "Incorrect encoding";
break;
}
fwrite($fwh, $buffer);
fclose($fwh);
$offset = ftell($frh) - ($piece - strlen( $buffer ));
}
fclose($frh);
?>
|
P.S. Кстати, 4 килобайта - 4096 байт, а не 40000. | |
|
|
|
|