ФорумПрограммированиеПыхнуть хотите?Готовые решения → AJAX и русский текст

AJAX и русский текст

  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 28 декабря 2008 г. 14:37

    в общем тут очень много лодарей которым не хочеться ни писать сайт в кодировке UTF-8, ни хотящих написать скрипт для перекодирования из WIN-1251

    этот пост написан не для них а для облегчения жизни другим чтобы они могли сюда послать всех лентяев

    итак конвертируем WIN-1251 в UTF-8 и обратно на стороне сервера


    function cp1251_to_utf8($s){
    $c209 = chr(209);
    $c208 = chr(208);
    $c129 = chr(129);
    for($i=0; $i<strlen($s); $i++){
    $c=ord($s[$i]);
    if ($c>=192 and $c<=239)
    $t.=$c208.chr($c-48);
    elseif ($c>239)
    $t.=$c209.chr($c-112);
    elseif ($c==184)
    $t.=$c209.$c209;
    elseif ($c==168)
    $t.=$c208.$c129;
    else
    $t.=$s[$i];
    }
    return $t;
    }

    function utf8_to_cp1251($s){
    for ($c=0;$c<strlen($s);$c++){
    $i=ord($s[$c]);
    if ($i<=127)
    $out.=$s[$c];
    if ($byte2){
    $new_c2=($c1&3)*64+($i&63);
    $new_c1=($c1>>2)&5;
    $new_i=$new_c1*256+$new_c2;
    if ($new_i==1025)
    $out_i=168;
    elseif ($new_i==1105)
    $out_i=184;
    else
    $out_i = $new_i-848;
    $out.=chr($out_i);
    $byte2=false;
    }
    if (($i>>5)==6) {
    $c1=$i;
    $byte2=true;
    }
    }
    return $out;
    }


    Получили информацию от пользователя, чтото сделали с БД и получили масив результата который надо отправить обратно, для этого превращаем его такой функцией в JSON


    function php2js($a){
       if (is_null($a))
           return 'null';
       if ($a === false)
           return 'false';
       if ($a === true)
           return 'true';
       if (is_scalar($a)) {
           $a = addslashes($a);
           $a = str_replace("\n", '\n', $a);
           $a = str_replace("\r", '\r', $a);
           return "'$a'";
       }
       $isList = true;
       for ($i=0, $j=count($a), reset($a); $i<$j; $i++, next($a))
           if (key($a) !== $i) {
               $isList = false;
               break;
           }
       $result = array();
       if ($isList) {
           foreach ($a as $v)
               $result[] = php2js($v);
           return '[ ' . join(',', $result) . ' ]';
       } else {
           foreach ($a as $k=>$v)
               $result[] = php2js($k) . ': ' . php2js($v);
           return '{ ' . join(',', $result) . ' }';
       }
    }


  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 28 декабря 2008 г. 14:52, спустя 15 минут 6 секунд

    php2js безусловно лодырям пригодится. )))
    Что, касается кодировок, то вроде как iconv есть, смысл в специальных функциях?
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 28 декабря 2008 г. 14:54, спустя 2 минуты 3 секунды

    AlexB, iconv очень часто запрещен на шаровых хостах
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 28 декабря 2008 г. 16:45, спустя 1 час 51 минуту 32 секунды


    AlexB, iconv очень часто запрещен на шаровых хостах
    Ну разве что …
    Хотя писать аджакс приложения и пользоваться всяким говнохостингом несколько нелепо.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 28 декабря 2008 г. 19:11, спустя 2 часа 25 минут 47 секунд


    AlexB, iconv очень часто запрещен на шаровых хостах
    хватит ровняться на русские гавношареды. у меня на шареде даже curl и геттекст разрешен, не говря уже о вбстрингах и иконв.

    а по теме, если бы было меньше таких постов - было бы меньше пидорского кода в сети. имхо.
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 28 декабря 2008 г. 20:02, спустя 51 минуту 30 секунд

    может у тебя еще и вызов system() разрешен?!
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 28 декабря 2008 г. 22:04, спустя 2 часа 2 минуты


    может у тебя еще и вызов system() разрешен?!
    уверен что да. только я юзаю бектипсы ``. а по теме `ls -lR` + preg match_ preg_match_all - таким методом всегда обходил дерево папок)

    ——-

    видимо разрешено раз про это помню :)

    добавлено меньше минуты назад
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 28 декабря 2008 г. 22:10, спустя 5 минут 25 секунд

    таким методом всегда обходил дерево папок)

    я как раз про это

Пожалуйста, авторизуйтесь, чтобы написать комментарий!