@arseniylebedev

Почему не работает в PHP?

Почему этот код нормально работает в JS
spoiler

function encrypt(text, num) {
    let encrypted_text = '';

    for (const symbol of text.toString()) {
        encrypted_text += String.fromCharCode(symbol.charCodeAt(0) + num);
    }

    return encrypted_text;
}

function decrypt(encrypted_text, num) {
    let decrypted_text = '';

    for (const symbol of encrypted_text) {
        decrypted_text += String.fromCharCode(symbol.charCodeAt(0) - num);
    }

    return decrypted_text;
}
console.log(decrypt(encrypt('Hello World!', 1000000, 1000000)));



А этот в PHP нет?
spoiler

class Encryption
{
    const DEFAULT_NUMBER= 1000000;
    const ENCODING = 'UTF-16';

    public static function encrypt($text, $num) {
        $text = strval($text);

        $encrypted_text = '';

        foreach (str_split($text) as $symbol) {
            $encrypted_text .= mb_chr(mb_ord($symbol, self::ENCODING) + $num, self::ENCODING);
        }

        return base64_encode($encrypted_text);
    }

    public static function decrypt($encrypted_text, $num) {
        $encrypted_text = base64_decode($encrypted_text);

        $decrypted_text = '';

        foreach (str_split($encrypted_text) as $symbol) {
            $decrypted_text .= mb_chr(mb_ord($symbol, self::ENCODING) - $num, self::ENCODING);
        }

        return $decrypted_text;
    }
}

$enc = \App\Encryption\Encryption::encrypt('Hello World!', 1000000);
$dec = \App\Encryption\Encryption::decrypt($enc, 1000000);
var_dump($enc, $dec);



Результат PHP кода:
spoiler

C:\wamp64\www\test.local\routes\web.php:49:string '25DeQNuQ3kDbkN5A25DeQNuQ3kDbkN5A25DeQNuQ3kDbkN5A25DeQNuQ3kDbkN5A' (length=64)
C:\wamp64\www\test.local\routes\web.php:49:string '' (length=0)
  • Вопрос задан
  • 160 просмотров
Решения вопроса 1
@galaxy
str_split() will split into bytes, rather than characters when dealing with a multi-byte encoded string.

Есть mb_str_split
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы