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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Задать кодировку созданному файлу.

Сообщения:  [1-10]    [11-20]  [21-24] 

 
 автор: morkovkin   (25.11.2007 в 23:33)   письмо автору
 
   для: Unkind   (25.11.2007 в 23:22)
 

Так я чё-то говорю? :) В айподе существенный недостаток того, что вообще файлы только текстовые и только по 4кб.. Очень не удобно и т.д.... и т.п...
Но здесь смысл в другом - главное итог :) А итог отличный, теперь удобно книжки для айподика делать :)

   
 
 автор: Unkind   (25.11.2007 в 23:22)   письмо автору
 
   для: morkovkin   (25.11.2007 в 23:17)
 

> Айпод тоже галимый редактор??
Ну раз он не может автоматически определить, что это UTF-8, а ждет только BOM, то это существенный недостаток. Даже Блокнот его уделал. А это, скажите, не показатель?

   
 
 автор: morkovkin   (25.11.2007 в 23:17)   письмо автору
 
   для: Unkind   (25.11.2007 в 23:14)
 

При чёт здесь редактор то?? Айпод тоже галимый редактор??
Всё, теперь всё ок :) Спасибо огромное, сейчас буду разбираться в коде :)
Ещё раз большое спасибо, оч помогли!!

   
 
 автор: 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 == 
        { 
            return 
$s
        } 

        if( 
$ord == 0xFE || $ord == 0xFF 
        { 
            
/* "The octet values FE and FF never appear", RFC 2279 */ 

            
return false
        } 

        if( 
$l 
        { 
            
/* Too long character */ 

            
return false
        } 

        if( 
$ord <= 0xBF 
        { 
            
$l++; 
        } 
        else 
        { 
            break; 
        } 
    }

    return 
substr($s0$i); 


$filename 'text.txt'
$dirname 'book'

if( !
is_dir$dirname ) )

    if( !
mkdir($dirname0777) )
    { 
        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$offsetSEEK_SET);

    
$fwh fopen($dirname '/' $i '.txt''wb');
    
$buffer fread($frh$piece);
    
$buffer reduce_utf8($buffer);

    if( 
$buffer === false )
    { 
        echo 
'Incorrect encoding';

        break;
    }

    
    
fwrite($fwhsubstr($buffer03) != "\xEF\xBB\xBF" "\xEF\xBB\xBF" $buffer $buffer); 
    
fclose($fwh); 

    
$offset ftell($frh) - ($piece strlen$buffer )); 


fclose($frh); 
?>

   
 
 автор: morkovkin   (25.11.2007 в 23:02)   письмо автору
5.1 Кб
 
   для: Unkind   (25.11.2007 в 22:59)
 

Нет, всё-таки ВордПад всё правильно показывает.
Первый файл открывает правильно, всё читается, а остальные нет.
Прикрепил архив.

   
 
 автор: Unkind   (25.11.2007 в 22:59)   письмо автору
 
   для: morkovkin   (25.11.2007 в 22:56)
 

Еще раз: в какой кодировке Вы хотите получить текст? Меня только это интересует. Вы говорите, что проверяете через WordPad кодировку. Какую ожидаете увидеть?

> Вот пример:
Это UTF-8. WordPad его не понимает (у меня). А если у Вас понимает ТОЛЬКО первый файл, то там BOM. Проверьте на Вашем iPod, а не в WordPad.

   
 
 автор: morkovkin   (25.11.2007 в 22:56)   письмо автору
 
   для: Unkind   (25.11.2007 в 22:46)
 

Вы про что? Я это писал про айпод - это правда. Но для теста, чтоб не нагружать машину, делать ради теста почти каждую минутут по 300 файликов, я просто там поменял размер, чтоб быстро делал 3 файла. И проверял через ВордПад кодировку..

Вобщем, кодировка не меняется, что делать то? :)

p.s. Ааа, тоесть я там хотел сказать, что UTF-8 делается только для первого файла, для остальных делается какая-то другая.. не знаю - какая...
Вот пример:
Таким образом, эксплуатируя уязвимость типа SQL-инъекция в MySQL-
сервере, нападающий может
Но через блокнот, он видится, как нормальный файл.

   
 
 автор: Unkind   (25.11.2007 в 22:46)   письмо автору
 
   для: morkovkin   (25.11.2007 в 22:31)
 

Вы же сами сказали, "Он читает только файлы по 4кб и в кодировке UTF-8". Что Вы хотите?

   
 
 автор: morkovkin   (25.11.2007 в 22:31)   письмо автору
 
   для: Unkind   (25.11.2007 в 21:40)
 

Спасибо! Про килобайты знаю :) Это просто у меня там файл весит 1.2мб.. и для теста я его делил на 3 части..
Но проблема осталась, кодировка файлов также не меняется. Поменялась только на первый созданный файл... При открытии блокнотом, все файлы читабельны, но при открытии WordPad сразу всё становится видно.

   
 
 автор: Unkind   (25.11.2007 в 21:40)   письмо автору
 
   для: 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 == )
            {
                return 
$s;
            }
            else
            {
                return 
false;
            } 
        } 

        if( 
$ord == 0xFE || $ord == 0xFF 
        { 
            
/* "The octet values FE and FF never appear", RFC 2279 */ 

            
return false
        } 

        if( 
$l 
        { 
            
/* Too long character */ 

            
return false
        } 

        if( 
$ord <= 0xBF 
        { 
            
$l++; 
        } 
        else 
        { 
            break; 
        } 
    } 

    return 
substr($s0$i); 


$filename 'text.txt'
$dirname 'book'
$encoding 'UTF-8'

if( !
is_dir$dirname ) ) 

    if( !
mkdir($dirname0777) ) 
    { 
        die( 
'Could not mkdir' ); 
    } 


$piece 4096

$total filesize($filename); 

$frh fopen($filename'rb'); 

for(
$offset 0$i 1; !feof($frh); $i++) 

    
fseek($frh$offsetSEEK_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.

   

Сообщения:  [1-10]    [11-20]  [21-24] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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