Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как можно узнать кодировку строки? 
:(
    Опции темы
PROme
Дата 7.3.2005, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 23.7.2003
Где: Kiev

Репутация: -1
Всего: 1



Подскажите, можно ли как-то узнать кодировку строки?
Одной и той же переменной присваиваются различные строки в различной кодировке.
Можно ли как то узнать, в какой кодмровке идет строка?

Собвстенно, в последствии, нужно все приводить к вин-1251


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Mal Hack
Дата 7.3.2005, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Смотреть по ASCII кодам...
Может быть и можно как-ть через iconv(); но я в этом сомневаюсь.
PM ICQ   Вверх
PROme
Дата 7.3.2005, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 23.7.2003
Где: Kiev

Репутация: -1
Всего: 1



Цитата
Смотреть по ASCII кодам...

smile к сожалению, мне это ни о чем не говорит
smile


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Mal Hack
Дата 7.3.2005, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Вот вырезка из FAQ
http://forum.vingrad.ru/index.php?showtopic=4632
Код
   function detect_cyr_charset($str)
   {
       $charsets = Array(
                       'k' => 0,
                       'w' => 0,
                       'd' => 0,
                       'i' => 0,
                       'm' => 0
                        );
       for ($i = 0, $length = strlen($str); $i < $length; $i++) {
           $char = ord($str[$i]);
           //non-russian characters
           if ($char < 128 || $char > 256) continue;
           //cp866
           if (($char > 159 && $char < 176) || ($char > 223 && $char < 242)) $charsets['d'] += 3;
           if (($char > 127 && $char < 160)) $charsets['d'] += 1;
           //koi8-r
           if (($char > 191 && $char < 223)) $charsets['k'] += 3;
           if (($char > 222 && $char < 256)) $charsets['k'] += 1;
           //win-1251
           if ($char > 223 && $char < 256) $charsets['w'] += 3;
           if ($char > 191 && $char < 224) $charsets['w'] += 1;
           //mac
           if ($char > 221 && $char < 255) $charsets['m'] += 3;
           if ($char > 127 && $char < 160) $charsets['m'] += 1;
           //iso-8859-5
           if ($char > 207 && $char < 240) $charsets['i'] += 3;
           if ($char > 175 && $char < 208) $charsets['i'] += 1;
       }
       arsort($charsets);
       return key($charsets);
   }


PM ICQ   Вверх
PROme
Дата 7.3.2005, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 23.7.2003
Где: Kiev

Репутация: -1
Всего: 1



Mal Hack спасибо огромное!
в принципе, то что нужно
а стандартных средств типа $s=perevod_v($s, 'w'); т.е. независимо от того, в какой кодировке $s... я так понял нету?


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Mal Hack
Дата 7.3.2005, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(PROme @ 7.3.2005, 18:47)
а стандартных средств типа $s=perevod_v($s, 'w'); т.е. независимо от того, в какой кодировке $s... я так понял нету?

Может быть можно как-ть через результат iconv, но там все равно надо смотреть ASCII.
В свое время стандартного решения я так и не нашел..
PM ICQ   Вверх
PROme
Дата 7.3.2005, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 23.7.2003
Где: Kiev

Репутация: -1
Всего: 1



хм... тут еще такая проблемка назрела smile
как быть с utf-8???
convert_cyr_string ее не берет smile
да и в детекте нет ее
как ее можно задетектить и перекодировать в вин-1251??? smile


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Mal Hack
Дата 7.3.2005, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(PROme @ 7.3.2005, 19:21)
и перекодировать в вин-1251???

лиюо через iconv либо циклом по строке и также через ASCII символы перекодировать.
UTF для win это &#1056 и последующие коды...
PM ICQ   Вверх
PROme
Дата 7.3.2005, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 23.7.2003
Где: Kiev

Репутация: -1
Всего: 1



Mal Hack
Цитата
лиюо через iconv
а это как?
Цитата
циклом по строке и также через ASCII символы перекодировать.
UTF для win это &#1056 и последующие коды...
не забывай... я супер туп smile ничего не понял smile
если не сложно.... smile


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Mal Hack
Дата 7.3.2005, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Эта из WIN1251 в UTF переводит
На выходе получаем АБВ
Т.е. мы работаем не с символами, а с их числовыми кадами.
Т.е. в win-1251 АБВ - ÀÁÂ, то как они представлены в UTF - смотри выше.

Код
<?php
function cp1251_utf8( $sInput )
{
  $sOutput = "";
  for ( $i = 0; $i < strlen( $sInput ); $i++ )
  {
      $iAscii = ord( $sInput[$i] );
      if ( $iAscii >= 192 && $iAscii <= 255 )
          $sOutput .=  "&#".( 1040 + ( $iAscii - 192 ) ).";";
      else if ( $iAscii == 168 )
          $sOutput .= "&#".( 1025 ).";";
      else if ( $iAscii == 184 )
          $sOutput .= "&#".( 1105 ).";";
      else
          $sOutput .= $sInput[$i];
  }

  return $sOutput;
}
print cp1251_utf8("АБВ");

?>


Это сообщение отредактировал(а) Mal Hack - 7.3.2005, 19:41
PM ICQ   Вверх
PROme
Дата 7.3.2005, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 23.7.2003
Где: Kiev

Репутация: -1
Всего: 1



smile smile smile smile
не знаю я как это использовать чтобы конвертить наоборот smile


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Mal Hack
Дата 7.3.2005, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Взято из мана:
Код
<?php
function win3utf($s) {
 for($i=0, $m=strlen($s); $i<$m; $i++)    {
     $c=ord($s[$i]);
     if ($c<=127) {$t.=chr($c); continue; }
     if ($c>=192 && $c<=207) {$t.=chr(208).chr($c-48); continue; }
     if ($c>=208 && $c<=239) {$t.=chr(208).chr($c-48); continue; }
     if ($c>=240 && $c<=255) {$t.=chr(209).chr($c-112); continue; }
     if ($c==184) { $t.=chr(209).chr(209); continue; };
     if ($c==168) { $t.=chr(208).chr(129); continue; };
 }
 return $t;
}
?>

или:
Сам делал когда-то
Код
echo iconv ('CP1251','UTF-8','some cyr string');

PM ICQ   Вверх
PROme
Дата 7.3.2005, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 23.7.2003
Где: Kiev

Репутация: -1
Всего: 1



Mal Hack ну ман я смотрел, конечно же...
НИЧЕГО не работает smile
не знаю, может это из-за того, что там utf-8 с рус. символами...? может такое быть???
спасайте ребята, я в этом не силен smile


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Mal Hack
Дата 7.3.2005, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Вариант с iconv работает безотказно 100%.
Код
echo iconv ('CP1251','UTF-8','some cyr string'); // -> utf
echo iconv ('UTF-8','CP1251','some cyr string'); // -> win

Что касается самописных функций, то они у меня тоже не работали...
PM ICQ   Вверх
PROme
Дата 7.3.2005, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 23.7.2003
Где: Kiev

Репутация: -1
Всего: 1



Mal Hack а у меня он это:
ЗнакомС?тва
преобразовывает в это:
ЗнакоРС?ства
smile
Добавлено @ 21:26
хото подожди...
тут может быть такой вариант что utf-8 может быть насильно передан как вин-1251 (ЗнакомС?тва)... следовательно это уже не utf-8, а какая-то мура smile
еще больше запутался smilesmilesmile


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.