如何替换PHP中的精确内容

如何替换PHP中的精确内容,php,Php,我正在制作一个非常简单的解密脚本,我可以解决一个问题 <?PHP // Define arrays $search = array("3", "4", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "1", "2"); $replace = array("A", "B", "C",

我正在制作一个非常简单的解密脚本,我可以解决一个问题

<?PHP

// Define arrays
$search = array("3", "4", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "1", "2");
$replace = 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");

$display = "Please Enter Encrypted Message!";

if ($_POST['submit'] == "Submit")
{
    // Get post data
    $subject = $_POST['encrypted'];


    $result = str_replace($search, $replace, $subject);

    $display = "Decrypted Message: {$result}";
}
?>
<html>
    <head>
    <title>Encryption</title>
    </head>
    <body>
        <form method="post" action="encryption.php">
            <input type="text" name="encrypted" /><br />
            <input type="submit" name="submit" value="Submit" />
        </form>
        <?PHP echo $display; ?>
    </body>
</html>

加密

如果我在“”中输入'1 7 17',它将返回'Y D YD',我的意图是返回'Y D N'

我的问题是,它将任何“1”替换为“Y”,将所有“7”替换为“D”,但不会将“1”和“7”一起检测为“17”,并将其替换为“N”

有人对检测精确的字符串/int有什么想法吗? 如果有人在输入加密数据时有任何好的分离技术(例如,1 7 17或1,7,17),那就太好了


提前谢谢

尝试对$search和$replace进行重新排序,以便将较大的数字放在第一位。在更换1和7之前,您需要更换17。这样,脚本中的任何N都将在任何Y或D之前被替换。

您可能会更好地遍历从$\u帖子中输入的值,并将它们与数组值进行匹配。类似这样的方法会奏效:

// Use $search as the array key and $replace as the value
$combi  = array_combine($search, $replace);

$display = "Please Enter Encrypted Message!";

if ($_POST['submit'] == "Submit")
{
    // Get post data
    $subject = $_POST['encrypted'];

    // Split our post data into an array
    $chars  = explode(' ', $subject);

    // Loop over each character entered and get 
    // the corresponding value back from our combi array
    foreach($chars as $char) {
        $result .=  $combi[$char];
    }

    $display = "Decrypted Message: {$result}";
}
如果您不需要为其他任何事情保持阵列的独立性,您可以自己组合它们并移除阵列。可能还值得在foreach中进行检查,以确保每个$u POST值($char)都存在于$combi数组中-如果(array\u key\u exists($char,$combi))或类似的值存在。希望有帮助


Ref:,

非理想但快速的解决方案-尝试重新排序搜索并替换字符,使其大小顺序相反-这样您就不会遇到此问题。作为替代方案。不要试图在单个
stru replace
中进行替换,而是循环输入字符串,逐个字符查找替换项,一次生成一个字符的新字符串。@user3228721如果您有答案,请将其标记为正确。谢谢,您的代码工作得很好,再次感谢,我以后一定会问你们的!