За последние 24 часа нас посетили 34942 программиста и 1695 роботов. Сейчас ищут 1002 программиста ...

Нужен аналог iconv ili mbstring - ни одна функция почему то

Тема в разделе "Прочие вопросы по PHP", создана пользователем dj--alex, 13 авг 2010.

  1. dj--alex

    dj--alex Активный пользователь

    С нами с:
    29 ноя 2007
    Сообщения:
    184
    Симпатии:
    0
    Не работает , а на хостинге нету :(

    попробовал сам энкодировать...\

    у меня нету в php на Mandriva никаких сообщений об ошибках и я не могу понять где их можно включить

    нужно чтобы если нет обоих функций то чтобы хоть както сообщение энкодировалось
    из вин в утф ... у меня же вообще ничего не видно :(
    т.е. пустые строки приходят


    Мой аналог если нету iconv

    PHP:
    1. <?php
    2. $encoder="";
    3. function iconvx ($from,$to,$var) {
    4.     global $sd,$encoder;
    5. //$verlang=$data[0][0];
    6.   if (extension_loaded('iconv')) {
    7.        if ($sd[19]=="utf-8") { $verlang=iconv($from,$to,$var); $encoder="iconv"; }
    8.   } elseif (extension_loaded('mb_string')) {
    9.       if ($sd[19]=="utf-8") {$verlang=mb_convert_encoding($var,$from,$to); $encoder="mb_string";}
    10.       } else
    11.       { $encoder="php iconv not installed";
    12. //$verlang=win_utf8($verlang);
    13.       $verlang=$var;
    14.   };
    15.   return $verlang;
    16. }
    17.  
    18. то что нашёл в инете
    19. function win_utf8($in_text) {
    20. $output = "";
    21. $other[1025] = "Ё";
    22. $other[1105] = "ё";
    23. $other[1028] = "Є";
    24. $other[1108] = "є";
    25. $other[1030] = "I";
    26. /* $other[1110] = "i";*/
    27. $other[1031] = "Ї";
    28. $other[1111] = "ї";
    29. for ($i = 0; $i<191) {
    30. $output.="&amp;#".(ord($in_text{$i})+848).";";
    31. }else {
    32. if (array_search($in_text{$i}, $other)===false){
    33. $output.=$in_text{$i};
    34. }else {
    35. $output.="&amp;#".array_search($in_text{$i}, $other).";";
    36. }
    37. }
    38. }
    39. return $output;
    40. }
    41.  
    42. function win3utf($s) {
    43.  $m=strlen($s);
    44.  for($i=0; $i<$m; $i++) {
    45.  $c=ord($s[$i]);
    46.  if ($c<=127) {$t.=chr($c); continue; }
    47.  if ($c>=192 && $c<=207) {$t.=chr(208).chr($c-48); continue; }
    48.  if ($c>=208 && $c<=239) {$t.=chr(208).chr($c-48); continue; }
    49.  if ($c>=240 && $c<=255) {$t.=chr(209).chr($c-112); continue; }
    50.  if ($c==184) { $t.=chr(209).chr(209); continue; };
    51.  if ($c==168) { $t.=chr(208).chr(129); continue; };
    52.  }
    53.  return $t;
    54. }
    55.  
    56.  
    57. function CP1251toUTF8($string){
    58.   $out = '';
    59.   for ($i = 0; $i<strlen($string); ++$i){
    60.    $ch = ord($string{$i});
    61.    if ($ch < 0x80) $out .= chr($ch);
    62.    else
    63.      if ($ch >= 0xC0)
    64.        if ($ch < 0xF0)
    65.              $out .= "\xD0".chr(0x90 + $ch - 0xC0); // А-Я, а-п (A-YA, a-p)
    66.        else $out .= "\xD1".chr(0x80 + $ch - 0xF0); // р-я (r-ya)
    67.      else
    68.        switch($ch){
    69.          case 0xA8: $out .= "\xD0\x81"; break; // YO
    70.          case 0xB8: $out .= "\xD1\x91"; break; // yo
    71.          // ukrainian
    72.          case 0xA1: $out .= "\xD0\x8E"; break; // Ў (U)
    73.          case 0xA2: $out .= "\xD1\x9E"; break; // ў (u)
    74.          case 0xAA: $out .= "\xD0\x84"; break; // Є (e)
    75.          case 0xAF: $out .= "\xD0\x87"; break; // Ї (I..)
    76.          case 0xB2: $out .= "\xD0\x86"; break; // I (I)
    77.          case 0xB3: $out .= "\xD1\x96"; break; // i (i)
    78.          case 0xBA: $out .= "\xD1\x94"; break; // є (e)
    79.          case 0xBF: $out .= "\xD1\x97"; break; // ї (i..)
    80.          // chuvashian
    81.          case 0x8C: $out .= "\xD3\x90"; break; // Ӑ (A)
    82.          case 0x8D: $out .= "\xD3\x96"; break; // Ӗ (E)
    83.          case 0x8E: $out .= "\xD2\xAA"; break; // Ҫ (SCH)
    84.          case 0x8F: $out .= "\xD3\xB2"; break; // Ӳ (U)
    85.          case 0x9C: $out .= "\xD3\x91"; break; // ӑ (a)
    86.          case 0x9D: $out .= "\xD3\x97"; break; // ӗ (e)
    87.          case 0x9E: $out .= "\xD2\xAB"; break; // ҫ (sch)
    88.          case 0x9F: $out .= "\xD3\xB3"; break; // ӳ (u)
    89.        }
    90.   }
    91.   return $out;
    92. }
    93.  
    94.  
    95. function win2utf($str)
    96. {
    97.   $utf = "";
    98.   for($i = 0; $i < strlen($str); $i++)
    99.   {
    100.     $donotrecode = false;
    101.     $c = ord(substr($str, $i, 1));
    102.     if ($c == 0xA8) $res = 0xD081;
    103.     elseif ($c == 0xB8) $res = 0xD191;
    104.     elseif ($c < 0xC0) $donotrecode = true;
    105.     elseif ($c < 0xF0) $res = $c + 0xCFD0;
    106.     else $res = $c + 0xD090;
    107.     $utf .= ($donotrecode) ? chr($c) : (chr($res >> 8) . chr($res & 0xff));
    108.   }
    109.   return $utf;
    110. }
     
  2. TrustNo1

    TrustNo1 Активный пользователь

    С нами с:
    28 мар 2010
    Сообщения:
    10
    Симпатии:
    0
    то что на серваке нету iconv уже является чудом потому что он по-моему сейчас есть везде..
    а насчет отображения ошибок могу сказать только одно - сделай в инишнике пхп display_errors = On. Дабы ошибки в браузере отображались красиво можно еще изменить html_errors = On
     
  3. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    TrustNo1, 1) отсутствие iconv() не чудо, а PHP4, которая уже демонстрирует лень админов хостинга. 2) error_reporting(), ini_set(), .htaccess, да. Не надо трогать в php.ini без нужды.
     
  4. dj--alex

    dj--alex Активный пользователь

    С нами с:
    29 ноя 2007
    Сообщения:
    184
    Симпатии:
    0
    ye.. на Мандриве пхп ставится обкромсанный... без всего

    спасибо/!!! ини так и не нашёл

    pishu error_reporting (E_ALL); - и намеренно в след строке допускаю ошибку - белый экран :(
    ini_set('error_reporting',E_ALL^E_NOTICE); - белый экран
    никакого сообщ про н хватающ ;