通过带有UTF-8的AJAX帖子发送表情符号

时间:2019-01-04 15:52:58

标签: php mysql ajax utf-8

我正在尝试通过AJAX将数据发送到PHP文件,然后使用SQL上传到我的数据库。我已经更改了表格以允许插入UTF-8。当我使用表单插入时,它可以正常工作,但是当使用AJAX发送数据时,它将不会发送数据。

例如,我正在尝试向PHP文件发送一些文本和表情符号,然后将其上传到我的数据库中。

我已经在页面顶部添加了<meta charset="utf-8">,甚至还向页面和PHP文件中添加了header("Content-Type: text/html; charset=utf-8");,因为我看到其他一些帖子提到了这一点,但是它没有用。

这是AJAX函数:

$detail = $('#post').text(); //Gets text from div

$.ajax({
    url: 'edit.php',
    type: 'post',
    contentType: 'application/x-www-form-urlencoded;charset=utf-8',
    data: {detail: $detail},
    datatype: 'html',
    success: function() {
        console.log($detail);
}});

$detail只是来自div的值,而所有编辑文件所做的只是UPDATE表。

当我console.log收集数据时,它会随文本和表情符号一起返回,但不会插入数据库中。

在撰写本文时,我注意到添加'application/x-www-form-urlencoded;charset=utf-8'会阻止整个过程正常运行,但是我不确定为什么。

要求的后端代码:

<?php
$host = "hostname";
$user = "user";
$password = "pass";
$db_name = "database";
$tbl_name = "table";

// Connect to server and select databse.
$conn = mysqli_connect($host, $user, $password)or die("cannot connect");
mysqli_select_db($conn, $db_name)or die("cannot select DB");

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    $detail = $_POST['detail'];

    // Add your validation and save data to database
    if(strlen($detail) <= 5000) {
        $stmt = mysqli_stmt_init($conn);

        $sql = "UPDATE $tbl_name SET detail = ?";
        if (mysqli_stmt_prepare($stmt, $sql)) {
            mysqli_stmt_bind_param($stmt, "s", $detail);
            mysqli_stmt_execute($stmt);
        }
        mysqli_stmt_close($stmt);
    }
}
?>

注意:当我通过表单但通过添加表情符号(例如,不起作用)时通过AJAX进行操作时,此方法有效。

1 个答案:

答案 0 :(得分:0)

在连接到数据库后,将mysqli_set_charset($conn, 'utf8mb4');添加到所有php文件中。