Forum.ck.ua

Черкаський міський форум

Правила! Правила!     * Учасники * Вхід   * Реєстрація
Сьогодні: 09 вересня 2010, 18:20


Часовий пояс UTC + 2 годин




Створити нову тему Відповісти  [ 8 повідомлень ] 
Автор Повідомлення
 Тема повідомлення: PHP смена кодировки
ПовідомленняДодано: 02 лютого 2009, 19:26 
Новичок
Аватар користувача
Офлайн
З нами з:
02 лютого 2009, 19:16
Повідомлення: 24
Звідки: ck.ua
Бали репутації: 35

Додати репутаціюВідібрати репутацію
Всем привет.
Подскажите пожалуйста, как средствами php можно сменить кодировку файла. Мне нужно сменить кодировку СР-1251 на UTF-8.
Функция convert_cyr_string преобразует строку из одной кириллической кодировки в другую. Мне я так понимаю эта функция не подходит, т.к. мне нужно в UTF-8, а это не кириллическая кодировка. Или я чето не так понимаю

_________________
Linux - дозор, всем выйти из Windows!


Догори
 Профіль  
 
 Тема повідомлення: Re: PHP смена кодировки
ПовідомленняДодано: 02 лютого 2009, 19:35 
Новичок
Офлайн
З нами з:
18 травня 2007, 00:34
Повідомлення: 46
Бали репутації: 140

Додати репутаціюВідібрати репутацію
http://ua2.php.net/manual/ru/function.iconv.php

такая годится?


Догори
 Профіль  
 
 Тема повідомлення: Re: PHP смена кодировки
ПовідомленняДодано: 02 лютого 2009, 20:28 
Живу я тут!
Аватар користувача
Офлайн
З нами з:
19 липня 2006, 01:56
Повідомлення: 5542
Бали репутації: 26699

Додати репутаціюВідібрати репутацію
Еще раз по порядку что нужно. Просто файлы сохранить как utf не средствами php то это может тот же AkelPad, к примеру... хорошая, кстать, штука если надо сконвертировать дамп БД из одной кодировки в другую. Если же просто строчную переменную (емм после прочтения станет файл) перебросить в другую кодировку, то или как сказал webman, или более дубовый способ. Хоть медленно и в лоб, но работает.
[spoiler]
<?php
class api_text{
private $chatrtable_utf8cp1251;
private $chatrtable_cp1251utf8;


function __construct(){
$this->chatrtable_utf8cp1251 = array(
"\xD0\x90"=>"\xC0","\xD0\x91"=>"\xC1","\xD0\x92"=>"\xC2","\xD0\x93"=>"\xC3","\xD0\x94"=>"\xC4",
"\xD0\x95"=>"\xC5","\xD0\x81"=>"\xA8","\xD0\x96"=>"\xC6","\xD0\x97"=>"\xC7","\xD0\x98"=>"\xC8",
"\xD0\x99"=>"\xC9","\xD0\x9A"=>"\xCA","\xD0\x9B"=>"\xCB","\xD0\x9C"=>"\xCC","\xD0\x9D"=>"\xCD",
"\xD0\x9E"=>"\xCE","\xD0\x9F"=>"\xCF","\xD0\xA0"=>"\xD0","\xD0\xA1"=>"\xD1","\xD0\xA2"=>"\xD2",
"\xD0\xA3"=>"\xD3","\xD0\xA4"=>"\xD4","\xD0\xA5"=>"\xD5","\xD0\xA6"=>"\xD6","\xD0\xA7"=>"\xD7",
"\xD0\xA8"=>"\xD8","\xD0\xA9"=>"\xD9","\xD0\xAA"=>"\xDA","\xD0\xAB"=>"\xDB","\xD0\xAC"=>"\xDC",
"\xD0\xAD"=>"\xDD","\xD0\xAE"=>"\xDE","\xD0\xAF"=>"\xDF","\xD0\x87"=>"\xAF","\xD0\x86"=>"\xB2",
"\xD0\x84"=>"\xAA","\xD0\x8E"=>"\xA1","\xD0\xB0"=>"\xE0","\xD0\xB1"=>"\xE1","\xD0\xB2"=>"\xE2",
"\xD0\xB3"=>"\xE3","\xD0\xB4"=>"\xE4","\xD0\xB5"=>"\xE5","\xD1\x91"=>"\xB8","\xD0\xB6"=>"\xE6",
"\xD0\xB7"=>"\xE7","\xD0\xB8"=>"\xE8","\xD0\xB9"=>"\xE9","\xD0\xBA"=>"\xEA","\xD0\xBB"=>"\xEB",
"\xD0\xBC"=>"\xEC","\xD0\xBD"=>"\xED","\xD0\xBE"=>"\xEE","\xD0\xBF"=>"\xEF","\xD1\x80"=>"\xF0",
"\xD1\x81"=>"\xF1","\xD1\x82"=>"\xF2","\xD1\x83"=>"\xF3","\xD1\x84"=>"\xF4","\xD1\x85"=>"\xF5",
"\xD1\x86"=>"\xF6","\xD1\x87"=>"\xF7","\xD1\x88"=>"\xF8","\xD1\x89"=>"\xF9","\xD1\x8A"=>"\xFA",
"\xD1\x8B"=>"\xFB","\xD1\x8C"=>"\xFC","\xD1\x8D"=>"\xFD","\xD1\x8E"=>"\xFE","\xD1\x8F"=>"\xFF",
"\xD1\x96"=>"\xB3","\xD1\x97"=>"\xBF","\xD1\x94"=>"\xBA","\xD1\x9E"=>"\xA2");

$this->chatrtable_cp1251utf8 = array(
"\xC0"=>"\xD0\x90","\xC1"=>"\xD0\x91","\xC2"=>"\xD0\x92","\xC3"=>"\xD0\x93","\xC4"=>"\xD0\x94",
"\xC5"=>"\xD0\x95","\xA8"=>"\xD0\x81","\xC6"=>"\xD0\x96","\xC7"=>"\xD0\x97","\xC8"=>"\xD0\x98",
"\xC9"=>"\xD0\x99","\xCA"=>"\xD0\x9A","\xCB"=>"\xD0\x9B","\xCC"=>"\xD0\x9C","\xCD"=>"\xD0\x9D",
"\xCE"=>"\xD0\x9E","\xCF"=>"\xD0\x9F","\xD0"=>"\xD0\xA0","\xD1"=>"\xD0\xA1","\xD2"=>"\xD0\xA2",
"\xD3"=>"\xD0\xA3","\xD4"=>"\xD0\xA4","\xD5"=>"\xD0\xA5","\xD6"=>"\xD0\xA6","\xD7"=>"\xD0\xA7",
"\xD8"=>"\xD0\xA8","\xD9"=>"\xD0\xA9","\xDA"=>"\xD0\xAA","\xDB"=>"\xD0\xAB","\xDC"=>"\xD0\xAC",
"\xDD"=>"\xD0\xAD","\xDE"=>"\xD0\xAE","\xDF"=>"\xD0\xAF","\xAF"=>"\xD0\x87","\xB2"=>"\xD0\x86",
"\xAA"=>"\xD0\x84","\xA1"=>"\xD0\x8E","\xE0"=>"\xD0\xB0","\xE1"=>"\xD0\xB1","\xE2"=>"\xD0\xB2",
"\xE3"=>"\xD0\xB3","\xE4"=>"\xD0\xB4","\xE5"=>"\xD0\xB5","\xB8"=>"\xD1\x91","\xE6"=>"\xD0\xB6",
"\xE7"=>"\xD0\xB7","\xE8"=>"\xD0\xB8","\xE9"=>"\xD0\xB9","\xEA"=>"\xD0\xBA","\xEB"=>"\xD0\xBB",
"\xEC"=>"\xD0\xBC","\xED"=>"\xD0\xBD","\xEE"=>"\xD0\xBE","\xEF"=>"\xD0\xBF","\xF0"=>"\xD1\x80",
"\xF1"=>"\xD1\x81","\xF2"=>"\xD1\x82","\xF3"=>"\xD1\x83","\xF4"=>"\xD1\x84","\xF5"=>"\xD1\x85",
"\xF6"=>"\xD1\x86","\xF7"=>"\xD1\x87","\xF8"=>"\xD1\x88","\xF9"=>"\xD1\x89","\xFA"=>"\xD1\x8A",
"\xFB"=>"\xD1\x8B","\xFC"=>"\xD1\x8C","\xFD"=>"\xD1\x8D","\xFE"=>"\xD1\x8E","\xFF"=>"\xD1\x8F",
"\xB3"=>"\xD1\x96","\xBF"=>"\xD1\x97","\xBA"=>"\xD1\x94","\xA2"=>"\xD1\x9E");
}

function conv_utf8to1251($string){
if (is_array($string)){
foreach ($string as $k => $v) {
if (is_array($v)) {
$string[$k] = $this->conv_utf8to1251($v);
} else {
$string[$k] = strtr($v, $this->chatrtable_utf8cp1251);
}
}
return $string;
} else {
return strtr($string, $this->chatrtable_utf8cp1251);
}
}

function conv_1251toutf8($string){
if (is_array($string)){
foreach ($string as $k=>$v) {
if (is_array($v)) {
$string[$k] = $this->conv_1251toutf8($v);
} else {
$string[$k] = strtr($v, $this->chatrtable_cp1251utf8);
}
}
return $string;
} else {
return strtr($string, $this->chatrtable_cp1251utf8);
}
}

}
?>
[/spoiler]
А кто вырубил спойлер?

_________________
http://webirc.org.ua
Минусую за необоснованые минусы в свою репу. Если ставишь минус - потрудись описать за что и почему.
Платишь бананами - получаешь обезьян (для работодателей :))


Догори
 Профіль  
 
 Тема повідомлення: Re: PHP смена кодировки
ПовідомленняДодано: 02 лютого 2009, 22:28 
Новичок
Аватар користувача
Офлайн
З нами з:
02 лютого 2009, 19:16
Повідомлення: 24
Звідки: ck.ua
Бали репутації: 35

Додати репутаціюВідібрати репутацію
Ок, попробую по порядку. У меня есть файл, созданный в винде, соответственно он имеет кодировку CP1251. Мне нужно для дальнейшей обработки, чтобы содержимое этого файла было в кодировке UTF-8.

Я прочитал о функции iconv, котрую посоветовал webman, за что ему большое спасибо, и вроде бы приспособил ее к своим нуждам вот в таком виде:

$fp = fopen($myfile,"r");
$str=file($myfile);
fclose($fp);

for ($i=0;$i<count($str);$i++)
{
$str2[$i]= iconv("WINDOWS-1251", "UTF-8", $str[$i]);
}

P.S. Если не средствами php, то я использую консольную команду: recode -f cp1251...utf-8 имя файла. Впрынцыпе пробовал писать в php так: system("recode -f cp1251...utf-8 $myfile"); Так тоже работает, но мне не сильно этот способ нравиться, хочется использовать только php-шные способы.

Спасибо за советы.

_________________
Linux - дозор, всем выйти из Windows!


Догори
 Профіль  
 
 Тема повідомлення: Re: PHP смена кодировки
ПовідомленняДодано: 02 лютого 2009, 22:36 
Модератор
Аватар користувача
Офлайн
З нами з:
02 квітня 2005, 20:36
Повідомлення: 1716
Звідки: ЮЗР
Бали репутації: 12048

Додати репутаціюВідібрати репутацію
хз чем просто блокнот не катит. :)


У вас недостатньо прав для перегляду приєднаних до цього повідомлення файлів.

_________________
Не маю часу зараз відповідати на таке глобальне питання. (©  Url Hidden Зарегистрироваться.)
"Про заборону незаконного збирання готівкових коштів". (©  Url Hidden Зарегистрироваться.)


Догори
 Профіль  
 
 Тема повідомлення: Re: PHP смена кодировки
ПовідомленняДодано: 02 лютого 2009, 22:46 
Новичок
Аватар користувача
Офлайн
З нами з:
02 лютого 2009, 19:16
Повідомлення: 24
Звідки: ck.ua
Бали репутації: 35

Додати репутаціюВідібрати репутацію
во-первых: Блокнот не катит потому что я работаю с веб-страницей, и мне нужно что бы во время выполнения скрипта кодировка в файле менялась, потом я с этого файла беру нужные мне данные.
во-вторых: в Linux Блокнота нема :wink:

_________________
Linux - дозор, всем выйти из Windows!


Догори
 Профіль  
 
 Тема повідомлення: Re: PHP смена кодировки
ПовідомленняДодано: 03 лютого 2009, 00:51 
Живу я тут!
Аватар користувача
Офлайн
З нами з:
19 липня 2006, 01:56
Повідомлення: 5542
Бали репутації: 26699

Додати репутаціюВідібрати репутацію
а нахрена её вообще менять? не проще ли всё это чудо просто сделать в utf?

_________________
http://webirc.org.ua
Минусую за необоснованые минусы в свою репу. Если ставишь минус - потрудись описать за что и почему.
Платишь бананами - получаешь обезьян (для работодателей :))


Догори
 Профіль  
 
 Тема повідомлення: Re: PHP смена кодировки
ПовідомленняДодано: 08 лютого 2009, 17:51 
Новичок
Аватар користувача
Офлайн
З нами з:
04 вересня 2006, 09:51
Повідомлення: 22
Бали репутації: 100

Додати репутаціюВідібрати репутацію
$str = file_get_contents("...");
$str1 = iconv("UTF-8", "WINDOWS-1251", $str);
file_put_contents("...", $str1);

можно вообще одной строкой:
file_put_contents("...", iconv("UTF-8", "WINDOWS-1251", file_get_contents("...")));

_________________
http://www.wizzart-ds.com


Догори
 Профіль  
 
Відображати повідомлення за:  Сортувати за  
Створити нову тему Відповісти  [ 8 повідомлень ] 

Часовий пояс UTC + 2 годин


Хто зараз онлайн

Користувачі, які зараз переглядають цей форум: ma][



Вперед:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Український переклад © 2005-2009 Українська підтримка phpBB