Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数不';在php中不返回任何内容_Php_String_Function - Fatal编程技术网

函数不';在php中不返回任何内容

函数不';在php中不返回任何内容,php,string,function,Php,String,Function,我对这个函数有一个问题,它没有为我返回任何东西,我不知道我想要获取这两个字符串的xor的原因` <?php if ($_SERVER['REQUEST_METHOD'] == "POST") { if (array_key_exists("back", $_POST)) { header('Location: index.php'); exit; } } function xor_this($string) { // Let's defin

我对这个函数有一个问题,它没有为我返回任何东西,我不知道我想要获取这两个字符串的xor的原因`

<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
    if (array_key_exists("back", $_POST)) {
        header('Location: index.php');
        exit;
    }
}
function xor_this($string) {

// Let's define our key here
 $key = ('ma');

 // Our plaintext/ciphertext
 $text =$string;

 // Our output text
 $outText = '';

 // Iterate through each character
 for($i=0;$i<strlen($text);)
 {
     for($j=0;$j<strlen($key);$j++,$i++)
     {
         $outText .= $text{$i} ^ $key{$j};
         echo 'i='.$i.', '.'j='.$j.', '.$outText{$i}.'<br />'; //for debugging
         echo $outText;
     }
 }  
 return $outText;
}
?>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <form name="confirm" action="index.php" method="POST">

            <table>
                <tr>
                    <td>La chaine a chiffrer :</td>
                    <td><?php echo $_POST['chaine']; ?></td>
                </tr>
                <tr>
                    <td>La cle de meme taille :</td>
                    <td><?php echo $_POST['cle']; ?></td>
                </tr>
                <tr>
                    <td>Le XOR :</td>
                    <td><?php  echo xor_this($_POST['chaine']); ?></td>
                </tr>
            </table>     
            <input type="submit" name="back" value="retour"/>

        </form>

    </body>
</html>
`

您的代码几乎是正确的。主要问题是,所有小写字母都将超出可打印范围

您可以使用
bin2hex()
查看十六进制的结果:

bin2hex(xor_this($string));
仅考虑小写字母,ASCII范围为:
[97122]
或二进制:

0110_0001
0111_1010
这意味着,对于一个小写字母,结果总是这样:
000x_xxxx

您可以获得的最大数字如下:
0001_1111
,即
31
,因此所有小写字母都将映射到不可打印的字符

更好的for循环 当$text短于$key时,可以通过在内部循环中引入附加条件来修复Jon指出的边缘情况

但请考虑以下选择:

$key = str_pad("", strlen($text), "ma");
for($i = 0; $i < strlen($text); $i++) {
    $outText .= $text[i] ^ $key[$i];
}
$key=stru pad(“,strlen($text),“ma”);
对于($i=0;$i
此代码有更严重的问题,例如嵌套循环。错误日志中有哪些错误?您是否启用和?函数根本不返回,还是返回空字符串?
for($j=0$j@Jon再考虑一下循环。实际上它非常好,非常聪明。@Phantom:如果键比文本长,会发生什么?为什么不简单地在文本上循环并使用
substr($key,$i%strlen($key),1)
$key = str_pad("", strlen($text), "ma");
for($i = 0; $i < strlen($text); $i++) {
    $outText .= $text[i] ^ $key[$i];
}