Страница 1 из 1
utf-8 vs cp1251
Добавлено: 2009-05-06 9:53:27
ADRE
как не странно столкнулся с банальной проблемой: файлы меняют свою кодировку c utf-8 при вхождении в скрипт другой кодировки (windows-1251), весь файл превращается в кусок шлака...
как сделать чтоб сохранялись файлы через fwrite только в utf-8 и детектировать сраный cp1251 - а то достало... (( setlocal - не помогает, конвертировать все в utf-8, без разбору не выход потому-что utf в utf получается бред
чем детектить разные кодировки? и естетственно только потом вставлять подмену....
Re: utf-8 vs cp1251
Добавлено: 2009-05-06 12:05:48
zg
работай в ютф-8
ADRE писал(а):и детектировать сраный cp1251
никак
Re: utf-8 vs cp1251
Добавлено: 2009-05-06 20:15:30
zg
-))) долго думал как KOI8-R отличить от CP1251, и таки придумал
короче говоря кодировку UTF-8 можно определить с вероятностью 90%, кодировку 1251 или KOI8-R с вероятностью ~60%
Re: utf-8 vs cp1251
Добавлено: 2009-05-07 3:46:44
ADRE
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;
}
?>
Re: utf-8 vs cp1251
Добавлено: 2009-05-07 7:51:48
zg
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
Re: utf-8 vs cp1251
Добавлено: 2009-05-07 7:56:22
zg
ктстати, когда я столкнулся с оной траблой в fckeditor, то сделал так
Код: Выделить всё
// Added by zg
if ( !$sFileName = makeSafeName(iconv('UTF-8', 'cp1251', $oFile['name']) ) ) $sFileName = makeSafeName($oFile['name']);
if ( !$sFileName ) $sFileName = $oFile['name'];
Re: utf-8 vs cp1251
Добавлено: 2009-05-07 8:32:07
ADRE
где - то на англицком читал, что у utf файла есть жесткая привязка к на чалу строки, нужно какие-то символы в него сунить: толи bom толи хрен знает что..
я просто все входящее кодирю сначало в 1251 потом в utf-8 - проще, т.к. скрипты перекодировки есть )
--------------------
нашел:
http://www.unicode.org/faq/utf_bom.html#BOM
Re: utf-8 vs cp1251
Добавлено: 2009-05-07 8:43:35
zg
ADRE писал(а):что у utf файла есть жесткая привязка к на чалу строки
ну во-первых не жёсткая, а опциональная, а во-вторых не к началу строки, а к началу файла. Будет время глянь
http://anton-pribora.ru/articles/xml/xml-xslt-utf8/
Щас за три минуты накатал
Код: Выделить всё
<?
// Скрипт создан в 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
Re: utf-8 vs cp1251
Добавлено: 2009-05-07 11:06:02
ADRE
про это читал, про строчку, просто у меня строчка ) а так начало файла ))... в википедии написано про 9 букав которые надо добавлять, да и ссылку помоему скинул в прошлом сообщении
Re: utf-8 vs cp1251
Добавлено: 2009-05-07 11:20:35
zg
ADRE писал(а):в википедии написано про 9 букав которые надо добавлять
чего? куда добавлять? не было такого. Конкретно с UTF-8 никаких сигнатур писать не надо.
ADRE писал(а):про это читал, про строчку, просто у меня строчка )
Не путай юникод и ютф-8, это несколько разные форматы. Юникод считается вроде как устаревшим форматом, поскольку слишком много жрёт, ютф-8 кодирует только специфичные символы и более гибок чем юникод.
Re: utf-8 vs cp1251
Добавлено: 2009-05-13 8:03:38
ADRE
zg писал(а):ADRE писал(а):в википедии написано про 9 букав которые надо добавлять
чего? куда добавлять? не было такого. Конкретно с UTF-8 никаких сигнатур писать не надо.
ADRE писал(а):про это читал, про строчку, просто у меня строчка )
Не путай юникод и ютф-8, это несколько разные форматы. Юникод считается вроде как устаревшим форматом, поскольку слишком много жрёт, ютф-8 кодирует только специфичные символы и более гибок чем юникод.
да мне как-то не важно, гибок не гибок ) писал про BOM в начале файла.... остальное пока не имеет смысла. т.к. я дятел ))), вот только не понял с чего ты взял что про юникод ну есть не кто не путает, и в википедии написано, что для определения кодировки делают эту самую вставку которую ты привел выше....
короче не понял че написал....
