Unicode

Discussion in 'PHP' started by Solker, 19 Jul 2009.

  1. Solker

    Solker Elder - Старейшина

    Joined:
    4 May 2006
    Messages:
    175
    Likes Received:
    53
    Reputations:
    18
    "\u041d\u0430 \u043c\u043e\u043b\u043e\u0434\u043e\u0433\u043e"

    Как средствами PHP преобразовать эту строку в обычную кодировку cp1251 например.

    На выходе должно получится
    "На молодого"

    Я посмотрел в мануле, там есть функции для работы с unicode, но они появятся только в 6 версии.
    А как сделать поддержу в 5, этих функций, я не знаю.

    Надеюсь на помощь, спасибо.
     
  2. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    РНР5 и Юникод - это песнь, что стону подобна. Потому что эти два понятия несовместимы...
     
  3. Forcer

    Forcer Elder - Старейшина

    Joined:
    12 Apr 2007
    Messages:
    321
    Likes Received:
    98
    Reputations:
    12
    это такой неслабый easter egg в php :D
     
    1 person likes this.
  4. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Почему несовместимы? А как это по вашему сделано?:)

    http://2cyr.com/decode/?lang=ru
     
  5. Forcer

    Forcer Elder - Старейшина

    Joined:
    12 Apr 2007
    Messages:
    321
    Likes Received:
    98
    Reputations:
    12
    есть тысяча и один способ это сделать без php.
     
  6. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Вот статья:
    Code:
    http://www.linkexchanger.su/2008/41.html
    
    вот пример к статье:
    Code:
    http://www.linkexchanger.su/example_json/json2.zip
    
    там два файла:

    1. JSON.php - класс
    2. json2.php - пример работы с классом

    Замените содержимое json2.php на вот это:

    PHP:
    <pre>
    <?php
    error_reporting
    (E_ALL);
    // динамическая корректировка путей к PEAR
    $PEAR_PATH_LOCAL $_SERVER['DOCUMENT_ROOT'].'/PEAR';
        
        
    set_include_path(
            
    get_include_path() . PATH_SEPARATOR $PEAR_PATH_LOCAL
        
    );

    class 
    Auto {
        public 
    $firm;
        public 
    $model;
        public 
    $year;
        public 
    $price;
        public 
    $sellers;
        
        function 
    Auto($firm,$model,$year,$price) {
            
    $this->firm $firm;
            
    $this->model $model;
            
    $this->year $year;
            
    $this->price $price;
            
    $this->sellers = array();
        }
    }

    ?>

    <?php

    $oAuto 
    = new Auto("Audi""A6"200878000);
    $oAuto->sellers[0] = "Фирма А";
    $oAuto->sellers[1] = "Фирма Б";
    $oAuto->sellers[2] = "Фирма В";

    require_once(
    'JSON.php');

    $json = new Services_JSON();

    $kod '\u041d\u0430 \u043c\u043e\u043b\u043e\u0434\u043e\u0433\u043e';
    echo 
    "Coded string: $kod \n";

    $sJSONText '{"firm":"Audi","model":"A6","year":2008,"price":78000,"sellers":["' $kod '","",""]}';

    $value $json->decode($sJSONText);

    echo 
    "Decoded string: {$value->sellers[0]}\n";

    ?>
    </pre>
    и наслаждайтесь расшифровкой UNICODE даже под PHP5, без ограничения в 50 кb как, например, здесь:
    Code:
    http://2cyr.com/decode/?lang=ru
    
    PS: В красивый вид приводить и оптимизировать не стал, просто сделал работоспособным. Зашифрованный текст храниться в переменной $kod (меняйте прямо в скрипте)
     
    #6 Pashkela, 19 Jul 2009
    Last edited: 19 Jul 2009
  7. Forcer

    Forcer Elder - Старейшина

    Joined:
    12 Apr 2007
    Messages:
    321
    Likes Received:
    98
    Reputations:
    12
    такая вещь на unicode должна поставляться из коробки. json требует отдельной библиотеки. наверняка существуют еще либы для работы с юникодом в php. но как разработчики дожили до 5 версии своего продукта и не обеспечели поддержку юникода на уровне языка как минимум странно и говорит лишь о том, что php все еще не далеко ушел в своем развитии от первоначальной расшифровки своей абревиатуры.
     
  8. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    а вот вам фактически аналог http://2cyr.com/decode/?lang=ru :D :D :D (только без выбора языка, кодировок и прочего - сами додумкаете, это уже легко) Без ограничений на размер вводимого закодированного текста (практически)::

    PHP:
    <?php
    error_reporting
    (E_ALL);
    // динамическая корректировка путей к PEAR
    $PEAR_PATH_LOCAL $_SERVER['DOCUMENT_ROOT'].'/PEAR';
        
        
    set_include_path(
            
    get_include_path() . PATH_SEPARATOR $PEAR_PATH_LOCAL
        
    );

    class 
    Auto {
        public 
    $firm;
        public 
    $model;
        public 
    $year;
        public 
    $price;
        public 
    $sellers;
        
        function 
    Auto($firm,$model,$year,$price) {
            
    $this->firm $firm;
            
    $this->model $model;
            
    $this->year $year;
            
    $this->price $price;
            
    $this->sellers = array();
        }
    }


    $oAuto = new Auto("Audi""A6"200878000);
    $oAuto->sellers[0] = "Фирма А";
    $oAuto->sellers[1] = "Фирма Б";
    $oAuto->sellers[2] = "Фирма В";

    require_once(
    'JSON.php');

    $json = new Services_JSON();

    $u_text $_POST['text'];
    $submit $_POST['decode'];
    if(isset(
    $submit)) {
      
    $kod $u_text;
      
    $sJSONText '{"firm":"Audi","model":"A6","year":2008,"price":78000,"sellers":["' $kod '","",""]}';
      
    $value $json->decode($sJSONText);
      
    $a $value->sellers[0];
    }
    ?>
    <html>
    <head> 
    <meta http-equiv="Content-Type" content="text; charset=UTF-8"> 
    <title>Unicode decoder</title> 
    </head> 
    <bоdу> 
    <form method="post"> 
    Unicode decoder<br>
    Coded text:
    <table> 
    <tr><td><textarea rows="10" cols="30" name="text"><?php echo $kod;?></textarea></td></tr> 
    </table> 
    <input type="submit" name="decode" value="Decode" />
    <br>Decoded text:
    <table> 
    <tr><td><textarea rows="10" cols="30"><?php echo $a;?></textarea></td></tr> 
    </table> 
    </form>
    </bоdу> 
    </html>
     
    #8 Pashkela, 19 Jul 2009
    Last edited: 19 Jul 2009
  9. Solker

    Solker Elder - Старейшина

    Joined:
    4 May 2006
    Messages:
    175
    Likes Received:
    53
    Reputations:
    18
    Вообщем всем спасибо, пока ждал ответа уже накатал простенький скрипт, т.к. переводить мне надо было только в Русскую раскладку.

    PHP:
    $array_b_uni = array('\u0410','\u0411','\u0412','\u0413','\u0414','\u0415','\u0416','\u0417','\u0418','\u0419','\u041a','\u041b','\u041c','\u041d','\u041e','\u041f','\u0420','\u0421','\u0422','\u0423','\u0424','\u0425','\u0426','\u0427','\u0428','\u0429','\u042a','\u042b','\u042c','\u042d','\u042e','\u042f');

    $array_b_win = array('A','Б','В','Г','Д','Е','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я');

    $array_m_uni = array('\u0430','\u0431','\u0432','\u0433','\u0434','\u0435','\u0436','\u0437','\u0438','\u0439','\u043a','\u043b','\u043c','\u043d','\u043e','\u043f','\u0440','\u0441','\u0442','\u0443','\u0444','\u0445','\u0446','\u0447','\u0448','\u0449','\u044a','\u044b','\u044c','\u044d','\u044e','\u044f');

    $array_m_win = array('а','б','в','г','д','е','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я');

    $str str_replace($array_m_uni$array_m_win$str);
    $str str_replace($array_b_uni$array_b_win$str);
     
    1 person likes this.