|
|
|
| Здравствуйте, участники форума!
Дано: У меня ОС Windows XP (возможно, нужная информация). В Zend Studio открываю файл с кодом и кодировкой UTF-8. Все комментарии и некоторые др. символы в коде отображаются непонятными символами.
Вопрос: Как конвертировать файл с кодом таким образом, чтобы после открытия его в Zend Studio я смог прочитать комментарии на русском, а не на непонятных символах?
P.S.: Пардон за название данной темы, оно не верно. Нужно не из ср1251 перевести в UTF-8, а наоборот. | |
|
|
|
|
|
|
|
для: SilentChild
(15.07.2012 в 18:49)
| | В РНР есть конвертер iconv, но в ответственных случаях лично я им не пользуюсь, поскольку случались весьма нежелательные ситуации при перекодировке файла целиком и об этом много сказано в сети. Лучше использовать функцию перекодировки.
Однако надо иметь в виду, что перевод из UTF-8 в ср1251 будет сопровождаться кракозябрами, если встретятся знаки национального алфавита. | |
|
|
|
|
|
|
|
для: Владимир55
(15.07.2012 в 19:08)
| | Благодарю за ответ! | |
|
|
|
|
 409.3 Кб |
|
|
для: Владимир55
(15.07.2012 в 19:08)
| | В приложенном к сообщению файле имеется картинка - код в том виде, как он отображается у меня в Zend Studio. В этом коде функцией iconv удалось перекодировать все комментарии в кодировку cp1251, но вот те символы, которые в массивах... их перекодировать не удалось. В чём может быть причина? Не значит ли это, что кодировка символов в массиве не UTF-8? | |
|
|
|
|
|
|
|
для: SilentChild
(16.07.2012 в 18:06)
| | А каким образом перекодировались массивы? Если перебирались и поочередно перекодировались все элементы каждого массива, то перекодировака из UTF-8 должна была пройти корректно.
Или Вы использовали array_map ?
Определить вид кодировки может помочь сервис http://www.artlebedev.ru/tools/decoder/
Лично я в сомнительных случаях записываю информацию в текстовый файл, а потом просматриваю её редактором WinHex. И уж тогда точно видно, что происходит. | |
|
|
|
|
|
|
|
для: Владимир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);
|
| |
|
|
|
|
|
|
|
для: 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;
}
|
| |
|
|
|
|
 690 байт |
|
|
для: SilentChild
(15.07.2012 в 18:49)
| | Вот скрипт, который использую для конвертирования web-приожений SoftTime в UTF8. Только нужно фильтровать бинарные файлы в каталоге, например, фотки. | |
|
|
|
|