PHP凯撒密码函数str_replace更改字符错误

问题描述 投票:0回答:1

我正在尝试使用PHP进行凯撒密码功能,但str_replace存在问题。

当我这样做时,

function evangel($data, $key) {
    $alphabet = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

    $cryptoAlphabet = array();

    for($i=0;$i<26;$i++) {
        $index = $i+$key;
        if($i+$key > 25) $index = (($i+$key)%25)-1;

        $cryptoAlphabet[$i] = $alphabet[$index];
    }

    $cryptedData = str_replace($alphabet, $cryptoAlphabet, $data);

    return $cryptedData;
}

它给了我这些数组;

$alphabet = Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g [7] => h [8] => i [9] => j [10] => k [11] => l [12] => m [13] => n [14] => o [15] => p [16] => q [17] => r [18] => s [19] => t [20] => u [21] => v [22] => w [23] => x [24] => y [25] => z )

$cryptoAlphabet  = Array ( [0] => b [1] => c [2] => d [3] => e [4] => f [5] => g [6] => h [7] => i [8] => j [9] => k [10] => l [11] => m [12] => n [13] => o [14] => p [15] => q [16] => r [17] => s [18] => t [19] => u [20] => v [21] => w [22] => x [23] => y [24] => z [25] => a ) 

这是我的$ data =“ aacceett”和$ key = 1的输出;

aaaaaaaa

但是当我这样做时]

function evangel($data, $key) {
    $alphabet = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

    $cryptoAlphabet = array('z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y');

    $cryptedData = str_replace($alphabet, $cryptoAlphabet, $data);

    return $cryptedData;
}

数组是手动声明的,但是这一次,例如,当我的$ data =“ ffddss”;]]

eeccrr

输出正确。为什么当我自动更改字母数组时,str_replace函数不起作用?

我正在尝试使用PHP进行凯撒密码功能,但str_replace存在问题。当我这样做时,函数evangel($ data,$ key){$ alphabet = array('a','b','c','d','e','f','g', 'h','...

php str-replace caesar-cipher
1个回答
0
投票

您的crytpo字母在每种情况下都是不同的。在第一种情况下,[0]元素为b,在第二种情况下为z。您的代码会产生它执行的结果,因为-例如-当它看到a时,将其替换为b,然后看到b的替换项是c,因此它执行了该操作,依此类推直到它遍历整个数组为止,最终以z替换为a,因此输出中的所有字符都变为a。在您的第二种情况下,a被转换为z(然后将其转换为y),但是所有其他字符都被替换为数组中较早的字符,因此不会再次被替换。

© www.soinside.com 2019 - 2024. All rights reserved.