我试图将UTF-8字符插入数据库,但PDO根本不插入它们。 基本上,用户以表格形式输入信息,然后通过Ajax将其发送到PHP文件。通过Ajax进行数据传输可以正常工作,但是不能通过PHP将数据插入到我的数据库中。
我发现这是UTF-8问题,因为当我不尝试插入带重音符号的字符时,它们都可以很好地工作。当我执行utf8_encode($fname); utf8_encode($lname)
时,它也起作用。如下所示,我为数据库连接定义了字符集,并且我尝试将字符串插入到的表是通过utf8_general_ci
进行编码的。我已经尝试了在stackoverflow上找到的所有可能的解决方案,但均无效果。有人可以告诉我我在做什么错吗?
这是我的代码:
index.php
<html lang="en">
<meta charset="utf-8">
<form class="mx-1" method="POST" action="">
<div class="form-group">
<input type="text" class="form-control" name="rg-fname" id="rg-fname" aria-describedby="emailHelp" placeholder="Prénom">
</div>
<div class="form-group">
<input type="text" class="form-control" name="rg-lname" id="rg-lname" aria-describedby="emailHelp" placeholder="Nom de famille">
</div>
<div class="form-group">
<input type="email" class="form-control" name="rg-email" id="rg-email" aria-describedby="emailHelp" placeholder="E-mail">
</div>
<div class="form-group">
<input type="password" class="form-control" name="rg-pw" id="rg-pw" placeholder="Mot de passe">
<small class="form-text text-muted">Votre mot de passe est crypté et indécryptable.</small>
</div>
<small class="form-text text-muted mt-1">En vous inscrivant, vous vous engagez à respecter les termes et conditions.</small>
<button class="btn btn-primary mt-2 w-100" id="btn-rg">Inscription</button>
<button class="btn btn-secondary mt-2 w-100" id="switch-login">J'ai déjà un compte</button>
</form>
<script>
$("#btn-rg").click(function(){
event.preventDefault();
var rgfname = $("#rg-fname").val();
var rglname = $("#rg-lname").val();
var rgemail = $("#rg-email").val();
var rgpw = $("#rg-pw").val();
$.ajax({
method: "POST",
url: "registration",
data: 'rg-fname='+rgfname+'&rg-lname='+rglname+'&rg-email='+rgemail+'&rg-pw='+rgpw,
success: function(status) {
$("#jQuery_log").html(status);
if(next == true)
{
//blabla
}
else
{
//blabla
}
}
})
});
</script>
</html>
registration.php
session_start();
$bdd = new PDO('mysql:host=localhost:8889;dbname=dbname;charset=utf8', 'blabla', 'blabla');
if(isset($_POST['rg-fname']) && isset($_POST['rg-lname']) && isset($_POST['rg-email']) && isset($_POST['rg-pw']))
{
$fname = $_POST['rg-fname'];
$lname = $_POST['rg-lname'];
$email = $_POST['rg-email'];
$pw = $_POST['rg-pw'];
if(preg_match("/^([\p{L}\- \s']+)$/ui", stripslashes($fname)))
{
$fname = ucfirst(strtolower($fname));
if(preg_match("/^([\p{L}\- \s']+)$/ui", $lname))
{
$lname = ucfirst(strtolower($lname));
if(filter_var($email, FILTER_VALIDATE_EMAIL))
{
if(preg_match('/^[A-Za-z0-9_~\-!@#\$%\^&*\(\)]+$/',$pw))
{
if(strlen($pw) >= 4)
{
//blabla
if($exist == 0)
{
function gen_uuid($len=8)
{
$hex = md5(time() . uniqid("", true));
$pack = pack('H*', $hex);
$tmp = base64_encode($pack);
$uid = preg_replace("#(*UTF8)[^A-Za-z0-9]#", "", $tmp);
$len = max(4, min(128, $len));
while (strlen($uid) < $len)
$uid .= gen_uuid(22);
return substr($uid, 0, $len);
}
$tag = gen_uuid();
$default_grad = "background-image: linear-gradient(to top, #30cfd0 0%, #330867 100%)";
//data treatment
}
}
}
}
}
}
}