代码之家  ›  专栏  ›  技术社区  ›  TheWelshManc

使用UTF-8通过AJAX Post发送Emoji[副本]

  •  0
  • TheWelshManc  · 技术社区  · 7 年前

    我试图通过AJAX将数据发送到PHP文件,然后使用SQL上传到我的数据库。我已经修改了表,允许插入UTF-8。当我使用表单插入时,它工作得很好,但是当使用AJAX发送数据时,它不会发送数据。

    例如,我试图发送一些文本和一个emoji到一个PHP文件,然后上传到我的数据库。

    我已经有了 <meta charset="utf-8"> 在我的页面顶部甚至添加了 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 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);
        }
    }
    ?>
    

    注意

    1 回复  |  直到 7 年前
        1
  •  0
  •   TheWelshManc    7 年前

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

    推荐文章