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

Разное

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

 

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

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

тема: Перевести содержимое файла из кодировки cp1251 в UTF-8
 
 автор: SilentChild   (15.07.2012 в 18:49)   письмо автору
 
 

Здравствуйте, участники форума!

Дано: У меня ОС Windows XP (возможно, нужная информация). В Zend Studio открываю файл с кодом и кодировкой UTF-8. Все комментарии и некоторые др. символы в коде отображаются непонятными символами.

Вопрос: Как конвертировать файл с кодом таким образом, чтобы после открытия его в Zend Studio я смог прочитать комментарии на русском, а не на непонятных символах?

P.S.: Пардон за название данной темы, оно не верно. Нужно не из ср1251 перевести в UTF-8, а наоборот.

  Ответить  
 
 автор: Владимир55   (15.07.2012 в 19:08)   письмо автору
 
   для: SilentChild   (15.07.2012 в 18:49)
 

В РНР есть конвертер iconv, но в ответственных случаях лично я им не пользуюсь, поскольку случались весьма нежелательные ситуации при перекодировке файла целиком и об этом много сказано в сети. Лучше использовать функцию перекодировки.

Однако надо иметь в виду, что перевод из UTF-8 в ср1251 будет сопровождаться кракозябрами, если встретятся знаки национального алфавита.

  Ответить  
 
 автор: SilentChild   (15.07.2012 в 19:31)   письмо автору
 
   для: Владимир55   (15.07.2012 в 19:08)
 

Благодарю за ответ!

  Ответить  
 
 автор: SilentChild   (16.07.2012 в 18:06)   письмо автору
409.3 Кб
 
   для: Владимир55   (15.07.2012 в 19:08)
 

В приложенном к сообщению файле имеется картинка - код в том виде, как он отображается у меня в Zend Studio. В этом коде функцией iconv удалось перекодировать все комментарии в кодировку cp1251, но вот те символы, которые в массивах... их перекодировать не удалось. В чём может быть причина? Не значит ли это, что кодировка символов в массиве не UTF-8?

  Ответить  
 
 автор: Владимир55   (16.07.2012 в 19:04)   письмо автору
 
   для: SilentChild   (16.07.2012 в 18:06)
 

А каким образом перекодировались массивы? Если перебирались и поочередно перекодировались все элементы каждого массива, то перекодировака из UTF-8 должна была пройти корректно.

Или Вы использовали array_map ?

Определить вид кодировки может помочь сервис http://www.artlebedev.ru/tools/decoder/

Лично я в сомнительных случаях записываю информацию в текстовый файл, а потом просматриваю её редактором WinHex. И уж тогда точно видно, что происходит.

  Ответить  
 
 автор: SilentChild   (16.07.2012 в 22:48)   письмо автору
 
   для: Владимир55   (16.07.2012 в 19:04)
 

Массивы никак не перекодировывались. Я просто читаю содержимое всего файла целиком и пихаю его как тест в виде параметра в функцию iconv. Вероятно, это не правильный способ?


Конвертирую содержимое файла вот этим кодом:


<?php
        
/*************************************************************
 *                         SCRIPT                            *
 *************************************************************/    
    
    
if($text file_get_contents('text.php'))
        echo 
'файл прочитан!<br /><br />';
        
    
$text iconv('utf-8''cp1251'$text);

    if(!
file_put_contents('convert.php'$text))
        echo 
'Новый файл не создан!';        
    
?>


Выдаёт следующее:


файл прочитан!


Notice: iconv() [function.iconv]: Detected an illegal character in input string in C:\Sites\home\localhost\www\index.php on line 10
Новый файл не создан!


Строка 10 (в которой ошибку выдаёт):

 $text = iconv('utf-8', 'cp1251', $text);

  Ответить  
 
 автор: Владимир55   (16.07.2012 в 23:22)   письмо автору
 
   для: SilentChild   (16.07.2012 в 22:48)
 

При перекодировании файла целиком с помощью iconv вполне возможен такой результат. Если же вставить iconv в скрипт, то все будет нормально. А для целого файла можно попробовать использовать функцию перекодировки:

<?php
function utf8_win($s

    
$s=str_replace("\xD0\xB0","а",$s);  $s=str_replace("\xD0\x90","А",$s); 
    
$s=str_replace("\xD0\xB1","б",$s);  $s=str_replace("\xD0\x91","Б",$s); 
    
$s=str_replace("\xD0\xB2","в",$s);  $s=str_replace("\xD0\x92","В",$s); 
    
$s=str_replace("\xD0\xB3","г",$s);  $s=str_replace("\xD0\x93","Г",$s); 
    
$s=str_replace("\xD0\xB4","д",$s);  $s=str_replace("\xD0\x94","Д",$s); 
    
$s=str_replace("\xD0\xB5","е",$s);  $s=str_replace("\xD0\x95","Е",$s); 
    
$s=str_replace("\xD1\x91","ё",$s);  $s=str_replace("\xD0\x81","Ё",$s); 
    
$s=str_replace("\xD0\xB6","ж",$s);  $s=str_replace("\xD0\x96","Ж",$s); 
    
$s=str_replace("\xD0\xB7","з",$s);  $s=str_replace("\xD0\x97","З",$s); 
    
$s=str_replace("\xD0\xB8","и",$s);  $s=str_replace("\xD0\x98","И",$s); 
    
$s=str_replace("\xD0\xB9","й",$s);  $s=str_replace("\xD0\x99","Й",$s); 
    
$s=str_replace("\xD0\xBA","к",$s);  $s=str_replace("\xD0\x9A","К",$s); 
    
$s=str_replace("\xD0\xBB","л",$s);  $s=str_replace("\xD0\x9B","Л",$s); 
    
$s=str_replace("\xD0\xBC","м",$s);  $s=str_replace("\xD0\x9C","М",$s); 
    
$s=str_replace("\xD0\xBD","н",$s);  $s=str_replace("\xD0\x9D","Н",$s); 
    
$s=str_replace("\xD0\xBE","о",$s);  $s=str_replace("\xD0\x9E","О",$s); 
    
$s=str_replace("\xD0\xBF","п",$s);  $s=str_replace("\xD0\x9F","П",$s); 
    
$s=str_replace("\xD1\x80","р",$s);  $s=str_replace("\xD0\xA0","Р",$s); 
    
$s=str_replace("\xD1\x81","с",$s);  $s=str_replace("\xD0\xA1","С",$s); 
    
$s=str_replace("\xD1\x82","т",$s);  $s=str_replace("\xD0\xA2","Т",$s); 
    
$s=str_replace("\xD1\x83","у",$s);  $s=str_replace("\xD0\xA3","У",$s); 
    
$s=str_replace("\xD1\x84","ф",$s);  $s=str_replace("\xD0\xA4","Ф",$s); 
    
$s=str_replace("\xD1\x85","х",$s);  $s=str_replace("\xD0\xA5","Х",$s); 
    
$s=str_replace("\xD1\x86","ц",$s);  $s=str_replace("\xD0\xA6","Ц",$s); 
    
$s=str_replace("\xD1\x87","ч",$s);  $s=str_replace("\xD0\xA7","Ч",$s); 
    
$s=str_replace("\xD1\x88","ш",$s);  $s=str_replace("\xD0\xA8","Ш",$s); 
    
$s=str_replace("\xD1\x89","щ",$s);  $s=str_replace("\xD0\xA9","Щ",$s); 
    
$s=str_replace("\xD1\x8A","ъ",$s);  $s=str_replace("\xD0\xAA","Ъ",$s); 
    
$s=str_replace("\xD1\x8B","ы",$s);  $s=str_replace("\xD0\xAB","Ы",$s); 
    
$s=str_replace("\xD1\x8C","ь",$s);  $s=str_replace("\xD0\xAC","Ь",$s); 
    
$s=str_replace("\xD1\x8D","э",$s);  $s=str_replace("\xD0\xAD","Э",$s); 
    
$s=str_replace("\xD1\x8E","ю",$s);  $s=str_replace("\xD0\xAE","Ю",$s); 
    
$s=str_replace("\xD1\x8F","я",$s);  $s=str_replace("\xD0\xAF","Я",$s); 
    return 
$s
}  

  Ответить  
 
 автор: idel   (16.07.2012 в 17:28)   письмо автору
690 байт
 
   для: SilentChild   (15.07.2012 в 18:49)
 

Вот скрипт, который использую для конвертирования web-приожений SoftTime в UTF8. Только нужно фильтровать бинарные файлы в каталоге, например, фотки.

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

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