我已经阅读了很多有关utf-8问题的similair问题的帖子,并尝试了一些但我无法找到原因。
我正在使用livecode,我想将一些字符串加密到数据库。所以我在Livecode中加密然后base64encode然后通过PHP / PDO发送到数据库。
加密 - > base64encode - > base64decode - >在livecode中解密工作正常。
现在当我将base64encoded数据发送到MariaDB数据库时,它会保存它,除了+已成为一个空格。
数据库,表和列都是utf8mb4_unicode_ci。
如果我通过数据库中的phpmyadmin手动将空间更改为+并使用Livecode读出,那么它base64decodes - >解密正确!
这是我用来连接和更新db的php文件:
Objective
你可以看到我在连接文件中尝试了一些字符集
// the connect.php file
$servername = "localhost";
$username = "blabla";
$password = "blabla";
try {
//$db = new PDO("mysql:host=$servername;dbname=blabla",$username, $password);
$db = new PDO("mysql:host=$servername;dbname=blabla;charset=utf8", $username, $password);
//$db = new PDO("mysql:host=$servername;dbname=blabla;charset=utf8mb4", $username, $password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'"));
// set the PDO error mode to exception
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//echo "Connected successfully";
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
?>
还试过PDO :: PARAM_LOB
试过VARCHAR VARBIN BLOB,但这没有改变。
我的第一个猜测是Livecode在发布到php文件时做了一些奇怪的事情。但是在发送之前检查变量会在字符串中发送+。所以我真的不知道它出错了。