Как записать функции JavaScript в PHP


Как я могу записать данные на полной яркости и играть в PHP?

function bytesToWords(bytes) {
    var str;
    for(var i = 0; i < bytes.length; i += 2) {
        var char = bytes[i] << 8;
        if (bytes[i + 1])
            char |= bytes[i + 1];
        str += String.fromCharCode(char);
    }
    return str.replace('undefined', '');
}

function bytesFromWords (string) {
    var bytes = [];
    for(var i = 0; i < string.length; i++) {
        var char = string.charCodeAt(i);
        bytes.push(char >>> 8);
        bytes.push(char & 0xFF);
    }
    return bytes;
}

у Меня есть сомнения в полной яркости и играть тип fromCharCode, push как сделать такой transcriçao?

 4
php
Author: Daniel Omine, 2015-04-21

1 answers

, Выполните это:

  • Эквивалентно string.length будет strlen($string) подсчитать количество символов, чтобы иметь совместимость с unicode, используйте:

    $j = preg_match_all('/.{1}/us', $string, $data);
    
  • Эквивалент bytes.length будет count($bytes) для подсчета количества элементов в массиве

  • Эквивалент bytes.push(char >>> 8) было бы $bytes[] = $char >> 8;

  • Для сцепления string существующей переменной в JavaScript мы используем += в PHP мы используем .=

  • Эквивалент string.charCodeAt будет ord(substr($string, $i, 1));, совместимость с unicode, используйте:

    function unicode_ord($char) {
        list (, $ord) = unpack('N', mb_convert_encoding($char, 'UCS-4BE', 'UTF-8'));
        return $ord;
    }
    
  • Эквивалентно String.fromCharCode(char); будет chr($char), совместимость с unicode, используйте:

    function unicode_chr($u) {
        return mb_convert_encoding('&#' . intval($u) . ';', 'UTF-8', 'HTML-ENTITIES');
    }
    

Я Считаю, что код должен выглядеть так:

<?php
function unicode_ord($char) {
    list (, $ord) = unpack('N', mb_convert_encoding($char, 'UCS-4BE', 'UTF-8'));
    return $ord;
}

function unicode_chr($u) {
    return mb_convert_encoding('&#' . intval($u) . ';', 'UTF-8', 'HTML-ENTITIES');
}

function bytesToWords($bytes) {
    $str = '';
    $j = count($bytes);

    for($i = 0; $i < $j; $i += 2) {
        $char = $bytes[$i] << 8;
        if ($bytes[$i + 1]) {
            $char |= $bytes[$i + 1];
        }
        $str .= unicode_chr($char);
    }
    return $str;
}

function bytesFromWords($string) {
    $bytes = array();
    $j = preg_match_all('/.{1}/us', $string, $data);
    $data = $data[0];

    for($i = 0; $i < $j; $i++) {
        $char = unicode_ord($data[$i]);
        $bytes[] = $char >> 8;
        $bytes[] = $char & 0xFF;
    }
    return $bytes;
}


$data = bytesFromWords('㬁愃膘ƘჀ䚐⦀飠噋&ӡ㏃棱쌌ص䌠');

echo implode(', ', $data);
echo bytesToWords($data);

Extra

В JavaScript вы использовали str.replace('undefined', '');", что переменная не была определена, но лучше установить значение для переменной и, следовательно, не будет необходимости заменить, так:

function bytesToWords(bytes) {
    var str = "";//Setado string vazia
    for(var i = 0; i < bytes.length; i += 2) {
        var char = bytes[i] << 8;
        if (bytes[i + 1])
            char |= bytes[i + 1];
        str += String.fromCharCode(char);
    }
    return str;
}
 8
Author: Guilherme Nascimento, 2015-04-22 01:45:49