utf-8 vs cp1251

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
ADRE
майор
Сообщения: 2641
Зарегистрирован: 2007-07-26 8:53:49
Контактная информация:

utf-8 vs cp1251

Непрочитанное сообщение ADRE » 2009-05-06 9:53:27

как не странно столкнулся с банальной проблемой: файлы меняют свою кодировку c utf-8 при вхождении в скрипт другой кодировки (windows-1251), весь файл превращается в кусок шлака...

как сделать чтоб сохранялись файлы через fwrite только в utf-8 и детектировать сраный cp1251 - а то достало... (( setlocal - не помогает, конвертировать все в utf-8, без разбору не выход потому-что utf в utf получается бред

чем детектить разные кодировки? и естетственно только потом вставлять подмену....
//del

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: utf-8 vs cp1251

Непрочитанное сообщение zg » 2009-05-06 12:05:48

работай в ютф-8
ADRE писал(а):и детектировать сраный cp1251
никак

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: utf-8 vs cp1251

Непрочитанное сообщение zg » 2009-05-06 20:15:30

-))) долго думал как KOI8-R отличить от CP1251, и таки придумал :Yahoo!:

короче говоря кодировку UTF-8 можно определить с вероятностью 90%, кодировку 1251 или KOI8-R с вероятностью ~60%

Аватара пользователя
ADRE
майор
Сообщения: 2641
Зарегистрирован: 2007-07-26 8:53:49
Контактная информация:

Re: utf-8 vs cp1251

Непрочитанное сообщение ADRE » 2009-05-07 3:46:44

zg писал(а):работай в ютф-8
как? работать с utf-8 если у тебя в $_SERVER['fdjsdlf'] посутпает хз какая кодирвка, а потом она месится в пхп, пхп создает файл с кодирвкой 1251, потом всё что было внутри файла с кодировкой utf-8 превращается в нечитабельный бред (

->гранит науки http://ivr.webzone.ru/articles/defcod_2/index.htm

за основу можно взять это: http://popoff.donetsk.ua/text/work/libs/a/charset/

короче ушел пилить... )))

-------------------------
нашел более простое решение при определенном модуле:

Код: Выделить всё

<?php
function detect_encoding($string) { 
  static $list = array('utf-8', 'windows-1251');
 
  foreach ($list as $item) {
    $sample = iconv($item, $item, $string);
    if (md5($sample) == md5($string))
      return $item;
  }
  return null;
}
?>
//del

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: utf-8 vs cp1251

Непрочитанное сообщение zg » 2009-05-07 7:51:48

ADRE писал(а):как? работать с utf-8 если у тебя в $_SERVER['fdjsdlf'] посутпает хз какая кодирвка
UTF-8 имеет достаточно выраженный формат, её опеределить не трудно.
http://ru.wikipedia.org/wiki/UTF8

Код: Выделить всё

Символы UTF-8 получаются из Unicode следующим образом:
Unicode					UTF-8
0x00000000 — 0x0000007F	0xxxxxxx
0x00000080 — 0x000007FF	110xxxxx 10xxxxxx
0x00000800 — 0x0000FFFF	1110xxxx 10xxxxxx 10xxxxxx
0x00010000 — 0x001FFFFF	11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: utf-8 vs cp1251

Непрочитанное сообщение zg » 2009-05-07 7:56:22

ктстати, когда я столкнулся с оной траблой в fckeditor, то сделал так

Код: Выделить всё

// Added by zg
if ( !$sFileName = makeSafeName(iconv('UTF-8', 'cp1251', $oFile['name']) ) ) $sFileName = makeSafeName($oFile['name']);
if ( !$sFileName ) $sFileName = $oFile['name'];

Аватара пользователя
ADRE
майор
Сообщения: 2641
Зарегистрирован: 2007-07-26 8:53:49
Контактная информация:

Re: utf-8 vs cp1251

Непрочитанное сообщение ADRE » 2009-05-07 8:32:07

где - то на англицком читал, что у utf файла есть жесткая привязка к на чалу строки, нужно какие-то символы в него сунить: толи bom толи хрен знает что..
я просто все входящее кодирю сначало в 1251 потом в utf-8 - проще, т.к. скрипты перекодировки есть )
--------------------
нашел: http://www.unicode.org/faq/utf_bom.html#BOM
//del

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: utf-8 vs cp1251

Непрочитанное сообщение zg » 2009-05-07 8:43:35

ADRE писал(а):что у utf файла есть жесткая привязка к на чалу строки
ну во-первых не жёсткая, а опциональная, а во-вторых не к началу строки, а к началу файла. Будет время глянь http://anton-pribora.ru/articles/xml/xml-xslt-utf8/

Щас за три минуты накатал :smile:

Код: Выделить всё

<?

// Скрипт создан в UTF-8

$array = array(
	'hello world!',
	'hello world это я!',
	iconv('UTF-8', 'cp1251', 'привет мир!'),
);

echo '<pre>';

foreach ( $array as $key => $value )
	echo 'Item #', $key + 1, ' is ', is_utf8($value) ? 'UTF-8' : 'unknown', ' charset', PHP_EOL;
	
echo '</pre>';

function is_utf8( $string )
{
	return (bool) preg_match('/([\xC0-\xDF]|[\xE0-\xEF]|[\xF0-\xF7])[\x80-\xBF]{1,3}/', $string);
}

?>
========   Результат =========
Item #1 is unknown charset
Item #2 is UTF-8 charset
Item #3 is unknown charset

Аватара пользователя
ADRE
майор
Сообщения: 2641
Зарегистрирован: 2007-07-26 8:53:49
Контактная информация:

Re: utf-8 vs cp1251

Непрочитанное сообщение ADRE » 2009-05-07 11:06:02

про это читал, про строчку, просто у меня строчка ) а так начало файла ))... в википедии написано про 9 букав которые надо добавлять, да и ссылку помоему скинул в прошлом сообщении
//del

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: utf-8 vs cp1251

Непрочитанное сообщение zg » 2009-05-07 11:20:35

ADRE писал(а):в википедии написано про 9 букав которые надо добавлять
чего? куда добавлять? не было такого. Конкретно с UTF-8 никаких сигнатур писать не надо.
ADRE писал(а):про это читал, про строчку, просто у меня строчка )
Не путай юникод и ютф-8, это несколько разные форматы. Юникод считается вроде как устаревшим форматом, поскольку слишком много жрёт, ютф-8 кодирует только специфичные символы и более гибок чем юникод.

Аватара пользователя
ADRE
майор
Сообщения: 2641
Зарегистрирован: 2007-07-26 8:53:49
Контактная информация:

Re: utf-8 vs cp1251

Непрочитанное сообщение ADRE » 2009-05-13 8:03:38

zg писал(а):
ADRE писал(а):в википедии написано про 9 букав которые надо добавлять
чего? куда добавлять? не было такого. Конкретно с UTF-8 никаких сигнатур писать не надо.
ADRE писал(а):про это читал, про строчку, просто у меня строчка )
Не путай юникод и ютф-8, это несколько разные форматы. Юникод считается вроде как устаревшим форматом, поскольку слишком много жрёт, ютф-8 кодирует только специфичные символы и более гибок чем юникод.
да мне как-то не важно, гибок не гибок ) писал про BOM в начале файла.... остальное пока не имеет смысла. т.к. я дятел ))), вот только не понял с чего ты взял что про юникод ну есть не кто не путает, и в википедии написано, что для определения кодировки делают эту самую вставку которую ты привел выше....
короче не понял че написал....
:oops:
//del