Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как создать файл в нужной кодировке?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Viper
Отправлено: 25 Марта, 2010 - 16:10:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Собстно создаю файл. Но т.к. платформа Windows кодировка скрипта и файлов cp1251 ansi. Мне же нужно чтобы файл был в UTF-8 без BOM.

Как это можно реализовать?

PS! Файл в формате xml+xspf.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Ch_chov
Отправлено: 25 Марта, 2010 - 16:55:07
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




В блокноте «Сохранить как».
Либо, используй notepad++
 
 Top
JustUserR
Отправлено: 25 Марта, 2010 - 17:51:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Viper пишет:
Собстно создаю файл. Но т.к. платформа Windows кодировка скрипта и файлов cp1251 ansi. Мне же нужно чтобы файл был в UTF-8 без BOM
Вам нужно сделать это из PHP-скритпа? Для этого нужно установить локаль в PHP-скрипте с помощью setlocale - и желательно сами данные для записи в файл хранить в той же кодировке что и нужно записать - потому что иначе придется использовать iconv вдобавок Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Viper
Отправлено: 26 Марта, 2010 - 08:36:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Ch_chov не это на php
JustUserR что-то не помогает. поставил

CODE (htmlphp):
скопировать код в буфер обмена
  1. $mosConfig_locale = 'RU';
  2. DEFINE(_ADM_KA_LOCALE, 'ru_RU');
  3. setlocale (LC_ALL, $mosConfig_locale.'UTF8', _ADM_KA_LOCALE.'UTF8', $mosConfig_locale.'UTF-8', _ADM_KA_LOCALE.'UTF-8');


далее приведу сам скрипт
PHP:
скопировать код в буфер обмена
  1. function createXSPFPlaylist($path='') {
  2.         global $mosConfig_absolute_path, $mosConfig_locale;
  3.  
  4.         if (!empty($path)) {
  5.                 require_once($mosConfig_absolute_path.'/components/com_kinoarhiv/service/getid3/getid3.php');
  6.                 setlocale (LC_ALL, $mosConfig_locale.'UTF8', _ADM_KA_LOCALE.'UTF8', $mosConfig_locale.'UTF-8', _ADM_KA_LOCALE.'UTF-8');
  7.  
  8.                 // Needed for windows only
  9.                 define('GETID3_HELPERAPPSDIR', 'C:/helperapps/');
  10.                 $getID3 = new getID3;
  11.                 $dir = @opendir($mosConfig_absolute_path.$path);
  12.                 $l = fopen($mosConfig_absolute_path.$path.'/playlist.xml', 'w') or die('Cant create file');
  13.                 fclose($l);
  14.  
  15.                 if ($dir === false) {
  16.                         echo 'Cannot open directory!';
  17.                 } else {
  18.                         $xml = '<?xml version="1.0" encoding="UTF-8"?>'."\r\n";
  19.                         $xml .= '<playlist version="1" xmlns="http://xspf.org/ns/0/">'."\r\n";
  20.                         $xml .= "\t<title>Soundtracks playlist for movie</title>\r\n";
  21.                         $xml .= "\t<tracklist>\r\n";
  22.                         $xml_start = iconv('windows-1251', 'UTF-8//IGNORE', $xml);
  23.                         $handle = fopen($mosConfig_absolute_path.$path.'/playlist.xml', 'a');
  24.                         fwrite($handle, $xml_start);
  25.  
  26.                         while (false !== ($file = readdir($dir))) {
  27.                                 $ff_name = realpath($mosConfig_absolute_path.$path.'/'.$file);
  28.                                 if (is_file($ff_name)) {
  29.                                         set_time_limit(60);
  30.                                         $f_info = $getID3->analyze($ff_name);
  31.                                         getid3_lib::CopyTagsToComments($f_info);
  32.                                         $path_new = $f_info['filenamepath'];
  33.                                         $file_ext = substr($path_new, strrpos($path_new, '.') +1);
  34.                                         echo '<pre>';
  35. print_r($f_info['comments']);
  36. echo '</pre>';
  37.                                         if ($file_ext == 'mp3') {
  38.                                                 if (isset($f_info['comments'])) {
  39.                                                         $title = $f_info['comments']['title'][0];
  40.                                                         $artist = $f_info['comments']['artist'][0];
  41.                                                         $album_y = $f_info['comments']['album'][0].' ('.$f_info['comments']['year'][0].')';
  42.                                                 }
  43.                                                 $line = "\t\t<track>\r\n";
  44.                                                 $line .= "\t\t\t<title>".$title."</title>\r\n";
  45.                                                 $line .= "\t\t\t<creator>".$artist."</creator>\r\n";
  46.                                                 $line .= "\t\t\t<annotation>".$album_y."</annotation>\r\n";
  47.                                                 $line .= "\t\t\t<info>".$time."</info>\r\n";
  48.                                                 $line .= "\t\t\t<location>".$path_new."</location>\r\n";
  49.                                                 $line .= "\t\t</track>\r\n";
  50.                                                 $line_result = iconv('windows-1251', 'UTF-8//IGNORE', $line);
  51.                                                 fwrite($handle, $line);
  52.                                         }
  53.                                 }
  54.                         }
  55.                         $xml_end = "\t</tracklist>\r\n";
  56.                         $xml_end .= "</playlist>";
  57.                         $xml_end_result = iconv('windows-1251', 'UTF-8//IGNORE', $xml_end);
  58.                         fwrite($handle, $xml_end_result);
  59.                         fclose($handle);
  60.                 }
  61.         }
  62. }


в результате получаю тот же самый файл в windows-1251 ANSI

(Отредактировано автором: 26 Марта, 2010 - 08:38:37)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Ch_chov
Отправлено: 26 Марта, 2010 - 09:37:59
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Обычный текстовый файл не содержит никакой мета информации о кодировке.
В какой кодировке данные запишешь, в такой они там и будут хранится.
В твоём примере достаточно iconv.

(Отредактировано автором: 26 Марта, 2010 - 09:38:32)

 
 Top
Viper
Отправлено: 26 Марта, 2010 - 10:10:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




ага вон де грабля была
Ch_chov закоментил setlocale. в файл записало текст в UTF-8, но когда открываю в notepad++ пишет что кодировка ANSI as UTF-8. ничего что так? или может добавить ему BOM?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Ch_chov
Отправлено: 26 Марта, 2010 - 10:21:53
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Всё правильно. BOM не нужен.
 
 Top
JustUserR
Отправлено: 26 Марта, 2010 - 12:05:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Viper пишет:
setlocale (LC_ALL, $mosConfig_locale.'UTF8'
А равзе знак подчеркивания между названием языка и UTF8 ну нужен - ведь у вас переменная $mosConfig_locale не содержит его и при конкатенации он не добавляется
И сам PHP-скрипт лучше держать в соответствующей кодировке
Ch_chov пишет:
Обычный текстовый файл не содержит никакой мета информации о кодировке
Ясное дело - но главное установить в самом PHP-скрипте определенную кодировку для рботы со строками в которой и записывать данные


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB