utf-8 vs cp1251
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
- ADRE
- майор
- Сообщения: 2641
- Зарегистрирован: 2007-07-26 8:53:49
- Контактная информация:
utf-8 vs cp1251
как не странно столкнулся с банальной проблемой: файлы меняют свою кодировку c utf-8 при вхождении в скрипт другой кодировки (windows-1251), весь файл превращается в кусок шлака...
как сделать чтоб сохранялись файлы через fwrite только в utf-8 и детектировать сраный cp1251 - а то достало... (( setlocal - не помогает, конвертировать все в utf-8, без разбору не выход потому-что utf в utf получается бред
чем детектить разные кодировки? и естетственно только потом вставлять подмену....
как сделать чтоб сохранялись файлы через fwrite только в utf-8 и детектировать сраный cp1251 - а то достало... (( setlocal - не помогает, конвертировать все в utf-8, без разбору не выход потому-что utf в utf получается бред
чем детектить разные кодировки? и естетственно только потом вставлять подмену....
//del
Услуги хостинговой компании Host-Food.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/
Тарифы на виртуальные сервера (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/
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: utf-8 vs cp1251
работай в ютф-8
никакADRE писал(а):и детектировать сраный cp1251
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: utf-8 vs cp1251
-))) долго думал как KOI8-R отличить от CP1251, и таки придумал
короче говоря кодировку UTF-8 можно определить с вероятностью 90%, кодировку 1251 или KOI8-R с вероятностью ~60%

короче говоря кодировку UTF-8 можно определить с вероятностью 90%, кодировку 1251 или KOI8-R с вероятностью ~60%
- ADRE
- майор
- Сообщения: 2641
- Зарегистрирован: 2007-07-26 8:53:49
- Контактная информация:
Re: utf-8 vs cp1251
как? работать с utf-8 если у тебя в $_SERVER['fdjsdlf'] посутпает хз какая кодирвка, а потом она месится в пхп, пхп создает файл с кодирвкой 1251, потом всё что было внутри файла с кодировкой utf-8 превращается в нечитабельный бред (zg писал(а):работай в ютф-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
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: utf-8 vs cp1251
UTF-8 имеет достаточно выраженный формат, её опеределить не трудно.ADRE писал(а):как? работать с utf-8 если у тебя в $_SERVER['fdjsdlf'] посутпает хз какая кодирвка
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
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: utf-8 vs cp1251
ктстати, когда я столкнулся с оной траблой в 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
где - то на англицком читал, что у utf файла есть жесткая привязка к на чалу строки, нужно какие-то символы в него сунить: толи bom толи хрен знает что..
я просто все входящее кодирю сначало в 1251 потом в utf-8 - проще, т.к. скрипты перекодировки есть )
--------------------
нашел: http://www.unicode.org/faq/utf_bom.html#BOM
я просто все входящее кодирю сначало в 1251 потом в utf-8 - проще, т.к. скрипты перекодировки есть )
--------------------
нашел: http://www.unicode.org/faq/utf_bom.html#BOM
//del
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: utf-8 vs cp1251
ну во-первых не жёсткая, а опциональная, а во-вторых не к началу строки, а к началу файла. Будет время глянь http://anton-pribora.ru/articles/xml/xml-xslt-utf8/ADRE писал(а):что у utf файла есть жесткая привязка к на чалу строки
Щас за три минуты накатал

Код: Выделить всё
<?
// Скрипт создан в 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
про это читал, про строчку, просто у меня строчка ) а так начало файла ))... в википедии написано про 9 букав которые надо добавлять, да и ссылку помоему скинул в прошлом сообщении
//del
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: utf-8 vs cp1251
чего? куда добавлять? не было такого. Конкретно с UTF-8 никаких сигнатур писать не надо.ADRE писал(а):в википедии написано про 9 букав которые надо добавлять
Не путай юникод и ютф-8, это несколько разные форматы. Юникод считается вроде как устаревшим форматом, поскольку слишком много жрёт, ютф-8 кодирует только специфичные символы и более гибок чем юникод.ADRE писал(а):про это читал, про строчку, просто у меня строчка )
- ADRE
- майор
- Сообщения: 2641
- Зарегистрирован: 2007-07-26 8:53:49
- Контактная информация:
Re: utf-8 vs cp1251
да мне как-то не важно, гибок не гибок ) писал про BOM в начале файла.... остальное пока не имеет смысла. т.к. я дятел ))), вот только не понял с чего ты взял что про юникод ну есть не кто не путает, и в википедии написано, что для определения кодировки делают эту самую вставку которую ты привел выше....zg писал(а):чего? куда добавлять? не было такого. Конкретно с UTF-8 никаких сигнатур писать не надо.ADRE писал(а):в википедии написано про 9 букав которые надо добавлять
Не путай юникод и ютф-8, это несколько разные форматы. Юникод считается вроде как устаревшим форматом, поскольку слишком много жрёт, ютф-8 кодирует только специфичные символы и более гибок чем юникод.ADRE писал(а):про это читал, про строчку, просто у меня строчка )
короче не понял че написал....

//del