Как записать функции 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?
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;
}