如何从字符串末尾删除退格字符?

3

实际上,我为此感到十分苦恼。这应该是一件小事,但我已经花费了几个小时的时间。

function ssl_encrypt($pass, $data) {

    $salt = substr(md5(mt_rand(), true), 8);

    $key = md5($pass . $salt, true);
    $iv = md5($key . $pass . $salt, true);

    $ct = mcrypt_encrypt (MCRYPT_RIJNDAEL_128, $key, $data,
                          MCRYPT_MODE_CBC, $iv);

    return base64_encode('Salted__' . $salt . $ct);
}

 $key = ssl_encrypt('super', trim($_POST['pass']));

我正在使用以下方式加密字符串并保存到文件中:

 $value = $_POST['service'] . "=" . $key . "\n";


 file_put_contents($file, $value , FILE_APPEND); 

然后它输出类似于这样的内容:

U2FsdGVkX1+0NB4++Kx28hUWNGwIqBoabI2O22U1TbpJ0n4FhzZvGtmSWiP7VOZj⏎

我认为最后一个符号是来自于这个 "\n"。

 $value = $_POST['service'] . "=" . $key . "\n";

我甚至尝试了这样的方法:
   $value = $_POST['service'] . "=" . $key.PHP_EOL;

        $fh = fopen($file,"a+");

        fwrite($fh, $value); //write to txtfile

        fclose($fh);

但是它输出了:

U2FsdGVkX1 + 0NB4 ++ Kx28hUWNGwIqBoabI2O22U1TbpJ0n4FhzZvGtmSWiP7VOZj

如何去掉最后一个退格符?请注意,在这种情况下,子字符串不是一个选择。

这是我解密的方式:

function ssl_decrypt($pass, $data) {
    $data = base64_decode($data);
    $salt = substr($data, 8, 8);
    $ct = substr($data, 16);

    $key = md5($pass . $salt, true);
    $iv = md5($key . $pass . $salt, true);

    $pt = mcrypt_decrypt (MCRYPT_RIJNDAEL_128, $key, $ct,
                          MCRYPT_MODE_CBC, $iv);

    return $pt;
}

$Loader = new josegonzalez\Dotenv\Loader($pathtoenv);

// 解析 .env 文件

$environment = (new josegonzalez\Dotenv\Loader($pathtoenv))
              ->parse()
              ->toArray();


$digitalpass = ssl_decrypt('super', (string)$_ENV['digital']);

PHP_EOL 代表的是换行符,Linux 系统下通常是 \n,Windows 系统下则是 \r\n。如果你使用 Linux 系统,可以通过 hexdump -C 命令查看该字符的实际值(或者使用 PHP 的 chr() 函数)。另外,由于需要在文件末尾添加记录,因此必须使用 \n 来分隔每条记录。不过,你可以使用 trim() 函数来去除字符串末尾的换行符。 - Kenney
你不能使用 substr($output, 0, -1); 吗? - Sergio Toledo Piza
2个回答

1

我认为有很多方法可以做到这一点:

  • 使用substr()函数删除最后一个字符:substr($output, 0, -1);
  • 使用chop()函数删除你想要的字符串:chop($output,"⏎");
  • 或者像Kenney所说的那样使用trim()函数:trim($output)

1
使用以下代码片段从字符串中删除所有不可打印的字符:
$trimmedVal = preg_replace("/\s+|[[:^print:]]/", "", $value)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接