Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   PHP (http://www.flasher.ru/forum/forumdisplay.php?f=20)
-   -   Utf->win (http://www.flasher.ru/forum/showthread.php?t=37484)

juggy 22.09.2002 14:02

Utf->win
 
Скажите как конвертировать в УТФ в Вин?

Crazy 22.09.2002 17:03

Вот тебе конвертор win->uft8. Обратный конвертор сделаешь из него сам.

PHP код:

<?php
for ($i=20; $i<256; ++$i) {
  
utf8[chr($i)] = chr($i);
}
utf8["й"] = chr(208).chr(185);
utf8["ц"] = chr(209).chr(134);
utf8["у"] = chr(209).chr(131);
utf8["к"] = chr(208).chr(186);
utf8["е"] = chr(208).chr(181);
utf8["н"] = chr(208).chr(189);
utf8["г"] = chr(208).chr(179);
utf8["ш"] = chr(209).chr(136);
utf8["щ"] = chr(209).chr(137);
utf8["з"] = chr(208).chr(183);
utf8["х"] = chr(209).chr(133);
utf8["ъ"] = chr(209).chr(138);
utf8["ф"] = chr(209).chr(132);
utf8["ы"] = chr(209).chr(139);
utf8["в"] = chr(208).chr(178);
utf8["а"] = chr(208).chr(176);
utf8["п"] = chr(208).chr(191);
utf8["р"] = chr(209).chr(128);
utf8["о"] = chr(208).chr(190);
utf8["л"] = chr(208).chr(187);
utf8["д"] = chr(208).chr(180);
utf8["ж"] = chr(208).chr(182);
utf8["э"] = chr(209).chr(141);
utf8["я"] = chr(209).chr(143);
utf8["ч"] = chr(209).chr(135);
utf8["с"] = chr(209).chr(129);
utf8["м"] = chr(208).chr(188);
utf8["и"] = chr(208).chr(184);
utf8["т"] = chr(209).chr(130);
utf8["ь"] = chr(209).chr(140);
utf8["б"] = chr(208).chr(177);
utf8["ю"] = chr(209).chr(142);
utf8["Й"] = chr(208).chr(153);
utf8["Ц"] = chr(208).chr(166);
utf8["У"] = chr(208).chr(163);
utf8["К"] = chr(208).chr(154);
utf8["Е"] = chr(208).chr(149);
utf8["Н"] = chr(208).chr(157);
utf8["Г"] = chr(208).chr(147);
utf8["Ш"] = chr(208).chr(168);
utf8["Щ"] = chr(208).chr(169);
utf8["З"] = chr(208).chr(151);
utf8["Х"] = chr(208).chr(165);
utf8["Ъ"] = chr(208).chr(170);
utf8["Ф"] = chr(208).chr(164);
utf8["Ы"] = chr(208).chr(171);
utf8["В"] = chr(208).chr(146);
utf8["А"] = chr(208).chr(144);
utf8["П"] = chr(208).chr(159);
utf8["Р"] = chr(208).chr(160);
utf8["О"] = chr(208).chr(158);
utf8["Л"] = chr(208).chr(155);
utf8["Д"] = chr(208).chr(148);
utf8["Ж"] = chr(208).chr(150);
utf8["Э"] = chr(208).chr(173);
utf8["Я"] = chr(208).chr(175);
utf8["Ч"] = chr(208).chr(167);
utf8["С"] = chr(208).chr(161);
utf8["М"] = chr(208).chr(156);
utf8["И"] = chr(208).chr(152);
utf8["Т"] = chr(208).chr(162);
utf8["Ь"] = chr(208).chr(172);
utf8["Б"] = chr(208).chr(145);
utf8["Ю"] = chr(208).chr(174);
utf8["ё"] = chr(209).chr(145);
utf8["Ё"] = chr(208).chr(129);

function 
toUTF8 ($s) {
  
$temp = "";
  for (
$i=0,$len=length($s);++$i) {
    
$temp .= utf8[$s[$i]];
  }
  return 
$temp;
}

?>


juggy 23.09.2002 00:12

мдя.. не работает :(((
Может как по другому?

Crazy 23.09.2002 00:41

У меня -- работает.

kompadre 23.09.2002 09:53

Мож так ?

Код:

<?
$var = utf8_encode ("Лажа все таки этот УТФ ...");
echo $var . "<br>";
$var = utf8_decode ($var);
echo $var;
?>


Crazy 23.09.2002 09:56

utf8_decode -- Converts a string with ISO-8859-1 characters encoded with UTF-8 to single-byte ISO-8859-1.

AnGL 23.09.2002 11:03

Используй библиотеку libiconv.
Там функция: iconv()

С уважением... ;)

juggy 23.09.2002 13:34

Цитата:

Оригинал написал(а) Crazy
У меня -- работает.
а у меня пишет unexepted ']' on line 3

kompadre 24.09.2002 00:58

Juggy,

почему utf8_decode() не катит ?

Crazy 24.09.2002 03:22

kompadre, открути вверх на три письма. :)

AnGL 24.09.2002 11:01

Re: Utf->win
 
Цитата:

Оригинал написал(а) juggy
Скажите как конвертировать в УТФ в Вин?
Мля ;) Разжевать вам и в рот положить... ;)
Короче говоря пишу подробно синтаксис функции, конвертирующей из UTF в win:

iconv('UTF-8', 'cp1251' , '$твоя строка');

С уважением... :rolleyes:

juggy 24.09.2002 12:46

$title[$i]=iconv("UTF-8","cp1251","$title[$i]");

не пашет

AnGL 24.09.2002 16:02

Если ничего не помогает, прочтите наконец инструкцию... ;)

Цитата:

iconv functions
This module contains an interface to the iconv library functions. To be able to use the functions defined in this module you must compile you PHP interpreter using the --with-iconv option. In order to do so, you must have iconv() function in standard C library or libiconv installed on your system. libiconv library is available from http://clisp.cons.org/~haible/packages-libiconv.html.

iconv library function converts files between various encoded character sets. The supported character sets depend on iconv() implementation on your system. Note that iconv() function in some system is not work well as you expect. In this case, you should install libiconv library.

Table of Contents
iconv — Convert string to requested character encoding
iconv_get_encoding — Get current setting for character encoding conversion
iconv_set_encoding — Set current setting for character encoding conversion
ob_iconv_handler — Convert character encoding as output buffer handler
iconv
(PHP 4 >= 4.0.5)

--==--==--==--==--==--==--
iconv -- Convert string to requested character encoding
Description

string iconv (string in_charset, string out_charset, string str)


It converts the string string encoded in in_charset to the string encoded in out_charset. It returns the converted string or FALSE, if it fails.

Example 1. iconv() example:

echo iconv("ISO-8859-1","UTF8","This is test.");

--==--==--==--==--==--==--
iconv_get_encoding
(PHP 4 >= 4.0.5)

iconv_get_encoding -- Get current setting for character encoding conversion
Description

array iconv_get_encoding ([string type])


It returns the current settings of ob_iconv_handler() as array or FALSE in failure.

See also: iconv_set_encoding() and ob_iconv_handler().

--==--==--==--==--==--==--
iconv_set_encoding
(PHP 4 >= 4.0.5)

iconv_set_encoding -- Set current setting for character encoding conversion
Description

array iconv_set_encoding (string type, string charset)


It changes the value of type to charset and returns TRUE in success or FALSE in failure.

Example 1. iconv_set_encoding() example:

iconv_set_encoding("internal_encoding", "UTF-8");
iconv_set_encoding("output_encoding", "ISO-8859-1");

See also: iconv_get_encoding() and ob_iconv_handler().

--==--==--==--==--==--==--
ob_iconv_handler
(PHP 4 >= 4.0.5)

ob_iconv_handler -- Convert character encoding as output buffer handler
Description

array ob_iconv_handler (string contents, int status)

It converts the string encoded in internal_encoding to output_encoding.

internal_encoding and output_encoding should be defined by iconv_set_encoding() or in configuration file.

Example 1. ob_iconv_handler() example:

ob_start("ob_iconv_handler"); // start output buffering
С уважением... :rolleyes:

kompadre 24.09.2002 19:37

2 Crazy

Ну и ?

УТФ - это не совсем CHARSET (кодировка) как полагают многие.
УТФ - это пакет этих самых чарсетов . Унивирсальная кодировка у которой "дофига" этих самых чаров, что позволяет писать на японском делая русские коментарии ...
Когда мало букв - много кодировок.
Когда много букв (УТФ) - каждая буква являет собой "большим качеством" информации ...
Тобишь - когда мы пользуемся 256 буквами, у нас получается писать только на одном языке, зато наша двоичное представление нашей буквы не выходит за грани 1 байта.
В УТФ мы пользуемся аж до 4-х байтов (!!!) для того что-бы написать один символ.


Тпррру ... Сорри, малость удалился от темы. И так, utf8_decode () единственное что делает в данном случае так это переводит из 4-байтного двоичного написания символа УТФ в 1-байтный ASCII. Все . А то какая кодировка Cp-1251 или KOI8-R, PHP не колышит. Это уж, извините, верстальшика дело вставлять нужный мета-тэг с нужным метачарсетом ... И броузерское - что-бы его правильно понять.

Crazy 24.09.2002 20:03

Вложений: 1
Цитата:

Оригинал написал(а) kompadre
2 Crazy
И так, utf8_decode () единственное что делает в данном случае так это переводит из 4-байтного двоичного написания символа УТФ в 1-байтный ASCII. Все . А то какая кодировка Cp-1251 или KOI8-R, PHP не колышит.

Ты пробовал это на практике? :)

Общая схема преобразования в более узкую кодировку такова:

1. Выбираем подмножество символов более широкой кодировки, которые можно отобразить в целевой кодировке.

2. Строим таблицу соответствия между этими символами широкой и узкой кодировок.

3. Все остальные символы отбражаем во что-то нейтральное (обычно -- в вопросительный знак).

Согласно проведенным мной экспериментам, функция utf8_decode поступает именно так. Тестовые файлы прилагаются.

Crazy 24.09.2002 20:10

Что эе касается iconv, то он просто не на всех хостингах подключен. Попробовал на sweb.ru:

Fatal error: Call to undefined function: iconv()

Crazy 24.09.2002 20:16

Цитата:

Оригинал написал(а) kompadre
Мож так ?

Код:

<?
$var = utf8_encode ("Лажа все таки этот УТФ ...");
echo $var . "<br>";
$var = utf8_decode ($var);
echo $var;
?>


Если бы ты догадался бы проверить результат utf8_encode, то сразу увидел бы, что это вовсе не русский текст... :)

kompadre 24.09.2002 20:59

Yesli bi ti srazu dogadalsia chto pitayutsia (i ne poluchayetsia) ne "utf8_encodirovat" a "utf8_decodirovat" , vozmozno udalos bi izbezhat mnogo flame-a :p
:D

P.S. Proshu prosheniya za translit. Tolko chto postavil sebe KDE 3.0.3 ...

kompadre 24.09.2002 21:09

Opiat-zhe, Crazy

Kstati , rasskazhi mne odin sekret : zachem ti pitayeshsia "utf-razkodirovat" "utf-nezakodirovanniy" text v predidushem zipe :eek:

Crazy 24.09.2002 22:42

Цитата:

Оригинал написал(а) kompadre
Yesli bi ti srazu dogadalsia chto pitayutsia (i ne poluchayetsia) ne "utf8_encodirovat" a "utf8_decodirovat" , vozmozno udalos bi izbezhat mnogo flame-a :p
Прочтитай вдумчиво первый абзац моего первого письма в этом треде. И откроется тебе истина... :D

Crazy 24.09.2002 22:43

Цитата:

Оригинал написал(а) kompadre
Opiat-zhe, Crazy

Kstati , rasskazhi mne odin sekret : zachem ti pitayeshsia "utf-razkodirovat" "utf-nezakodirovanniy" text v predidushem zipe :eek:

??? Файл utf8.txt записан в кодировке UTF-8, в чем ты можешь убедиться с помощью любого редактора, поддерживающего UTF-8.

Надеюсь, ты его не notepad'ом открывал? :D

Crazy 24.09.2002 22:49

Для контроля скачал utf8.zip обратно, распаковал и открыл файл utf8.txt в редакторе. Скриншот прилагается:

http://crazy.stekweb.net/screenshots/utf8.gif

Может быть, мне все же стОит устроить ликбез? :)

Crazy 24.09.2002 23:21

А вот, собственно, и обратный конвертор, сделанный из первого опубликованного в треде исходника. Оптимизация не проводилась, ибо лениво.

PHP код:

<?php
function u8($win,$h,$t) {
  global 
$w8;
  
$w8[chr($h).chr($t)] = $win;
}

$c1 = chr(208);
$c2 = chr(209);

u8("й",208,185); u8("ц",209,134); u8("у",209,131);
u8("к",208,186); u8("е",208,181); u8("н",208,189);
u8("г",208,179); u8("ш",209,136); u8("щ",209,137);
u8("з",208,183); u8("х",209,133); u8("ъ",209,138);
u8("ф",209,132); u8("ы",209,139); u8("в",208,178);
u8("а",208,176); u8("п",208,191); u8("р",209,128);
u8("о",208,190); u8("л",208,187); u8("д",208,180);
u8("ж",208,182); u8("э",209,141); u8("я",209,143);
u8("ч",209,135); u8("с",209,129); u8("м",208,188);
u8("и",208,184); u8("т",209,130); u8("ь",209,140);
u8("б",208,177); u8("ю",209,142); u8("Й",208,153);
u8("Ц",208,166); u8("У",208,163); u8("К",208,154);
u8("Е",208,149); u8("Н",208,157); u8("Г",208,147);
u8("Ш",208,168); u8("Щ",208,169); u8("З",208,151);
u8("Х",208,165); u8("Ъ",208,170); u8("Ф",208,164);
u8("Ы",208,171); u8("В",208,146); u8("А",208,144);
u8("П",208,159); u8("Р",208,160); u8("О",208,158);
u8("Л",208,155); u8("Д",208,148); u8("Ж",208,150);
u8("Э",208,173); u8("Я",208,175); u8("Ч",208,167);
u8("С",208,161); u8("М",208,156); u8("И",208,152);
u8("Т",208,162); u8("Ь",208,172); u8("Б",208,145);
u8("Ю",208,174); u8("ё",209,145); u8("Ё",208,129);

function 
utf2win ($text) {
  global 
$c1,$c2,$w8;
  
$u = false;
  
$temp = "";
  for(
$i=0,$len=strlen($text); $i<$len; $i++) {
    
$c = substr($text,$i,1);
    if (
$u) {
      
$c = $w8[$lc.$c];
      
$temp .= isset($c)?$c:"?";
      
$u = false;
    }
    else if (
$c==$c1 || $c==$c2) {
      
$u = true;
      
$lc = $c;
    }
    else
      
$temp .= $c;
  }
  return 
$temp;
}

$text = file("utf8.txt");
foreach(
$text as $line) 
  echo 
"<br>".utf2win($line);

?>

Для тестирования можно взять utf8.txt из приведенного ранее аттача. :)

juggy 25.09.2002 10:34

Гм.. круто :)
Но , iconv заработал:)

Crazy 25.09.2002 11:09

Если iconv работает, то лучше пользоваться именно им по двум соображениям:

1. Он примерно втрое быстрее, чем приведенный выше код (точных цифр я уже не помню).

2. Приведенная выше функция будет лажаться, если в utf-8 кроме латиницу и русского есть что-то еще. А iconv сработает корректно и в этом случае.

kompadre 25.09.2002 19:08

2 Crazy
Не знаю ... Хемакс сказал мне что текст - самый что ни на есть плоский. И закодирован он в ИСО. Хотя мож и проглючил скотина, это у него бывает.

Я очень рад что все решилось! iconv-урра.

ЗЫ Да будет Peace и Пиво.

Crazy 25.09.2002 22:02

Цитата:

Оригинал написал(а) kompadre
2 Crazy
Не знаю ... Хемакс сказал мне что текст - самый что ни на есть плоский.

А он и не обязан определять, что это UTF-8. Ты сам должен был ему намекнуть. С vim ситуация аналогичная.

Если б был гарантированный способ определять кодировку, то в заголовке xml не пришлось бы вводить атрибут encoding. :)

ivan_ppp 17.07.2004 21:59

вопрос
 
Цитата:

Оригинал написал(а) juggy
$title[$i]=iconv("UTF-8","cp1251","$title[$i]");

не пашет

ну это все хорошо!!!! но вот как быть с Flash-ем если получаешь текст из файла а он win1251 или koi8-r и не исправишь

да и интересно я делал запрос скрипту с помощью объекта LoadVars.sendAndLoad все то что приходит от флеша и потом пересылается обратно читается нормально а что генерит ПХП то....(((((( но браузер при запросе к скрипту получает нормальный текст??????? :confused:

Crazy 17.07.2004 23:09

ivan_ppp, тебе, как студенту-археологу, надлежит побольше думать над смыслом своих сообщений. И составлять их так, чтобы понять их мог не только ты.

Так что или перепиши свой вопрос в осмысленной форме -- или жди телепатов.

ivan_ppp 18.07.2004 14:00

вопрос
 
Цитата:

Оригинал написал(а) ivan_ppp

ну это все хорошо!!!! но вот как быть с Flash-ем если получаешь текст из файла а он win1251 или koi8-r и не исправишь

Вопрос в полне конкретен!!!--- Что надо писать в AS чтобы можно было читать текст из txt-файла, конечно отформатированного по всем правилам Переменная=значение&... минуя предватительную обработку скриптами ПХП или перлом????

nagash 18.07.2004 14:17

ответ:
текст должен быть в UTF8

совет:
здесь есть отдельный раздел в форуме по AS


Часовой пояс GMT +4, время: 17:19.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.