【问题标题】:Sending An Emoji Via AJAX Post With UTF-8 [duplicate]通过使用 UTF-8 的 AJAX 帖子发送表情符号 [重复]
【发布时间】:2019-01-04 15:52:57
【问题描述】:

我正在尝试通过 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 添加表情符号(如 ????它不起作用。

【问题讨论】:

  • 对于插入,我们需要查看 PHP 代码。我的猜测是 $detail 不是您所期望的。您所说的内容类型是 jQuery AJAX 的默认值,因此如果控制台中没有错误,这将很难解决。
  • 在浏览器中查看来自调试器的 HTTP 请求也很好。
  • @JayBlanchard 我编辑了我的帖子,以便您可以看到后端。控制台中没有出现错误。 $detail 完全符合其应有的样子,并且在我设置 contentType 之前,整个事情都运行良好。
  • 您知道您的更新语句将填充表中的每一行,对吧?
  • 你知道 MySQL 的默认 UTF8 并不是真正的 UTF8,对吧?如果您想存储表情符号,您需要使用 utfmb4 以获得完整的 UTF8 支持。

标签: php mysql ajax utf-8


【解决方案1】:

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

【讨论】:

  • 我说过;两次。
  • 对不起,我看错了你想说的,回答问题,我会为你投票:)
  • 这是我从一开始就怀疑的副本,但投了反对票。无论如何,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
  • 2021-12-30
  • 1970-01-01
  • 2020-11-30
  • 2014-08-06
  • 1970-01-01
  • 2016-06-26
相关资源
最近更新 更多