ajax 发布后的 Phpmyadmin 奇怪的字符

Posted

技术标签:

【中文标题】ajax 发布后的 Phpmyadmin 奇怪的字符【英文标题】:Phpmyadmin weird characters after ajax post 【发布时间】:2018-12-29 13:25:06 【问题描述】:

我将一些数据从 php 表单插入到数据库中。当我输入希腊字符时,数据库显示奇怪的字符。

我的 html 中有 charset="utf-8" 我尝试解码帖子值,然后从奇怪的字符中得到它给我????

$.ajax(
   url:postURL,
   method:"POST",             
   data:$('#add_name').serialize(),
   type: 'json',
   success:function(data)
   
     i=1;
     var spot = document.getElementById('spot_name').value;
     window.location.href = "<?php echo base_url("index.php/Spot_preview/spot_preview/");?>"+spot;

   
  );

php

foreach ($_POST["date"] as $key => $date) 
    $dur =$_POST['spot_duration'];
    $cat = $_POST['category'][$key];
    $price = $dur * $cat;
    $spot_name = ($_POST['spot_name']);
    $sql = "INSERT INTO spot(spot_duration,spot_type,spot_name,spot_link,customer_name,spot_date,spot_show,spot_time,spot_price,spot_category) VALUES ('".$_POST['spot_duration']."','".$_POST['spot_type']."','".$spot_name."','".$_POST['file_name_helper']."','".$_POST['customer_name']."','".$date."','".$_POST['show'][$key]."','".$_POST['time'][$key]."',$price,'".$_POST['category'][$key]."')";
    $mysqli->query($sql);

【问题讨论】:

排序规则设置为什么? @comphonia utf8-unicode-ci 尝试在 phpmyadmin 设置中将其更改为 greek_general_ci 我做到了,仍然得到奇怪的字符。如果我不使用 ajax 而只是通过 php 提交表单,则数据将正确存储。所以我认为它与 ajax 帖子而不是数据库有关 如果您将表单序列化为 JSON,则必须解析数据并从中构建 SQL 查询。看不到后端代码也忍不住 【参考方案1】:

更改您的 contentType 以支持不同的字符集:

dataType: 'json',
contentType: "application/json; charset=utf-8",

编辑: .. 我自己尝试并测试过,发现 ajax 请求完全没有问题,它发送的数据非常好,但是收到后问题出在服务器端。

你必须在你的方法中这样设置 php 标头:

header('Content-Type: application/json; charset=utf-8');

我已发送此文本 ΑαΒβΓγΔδΕεΖζΗηΘθΙιΚκΛλΜμΝν 并在使用 charset utf-8 设置标题后正确接收并回显它。

【讨论】:

如果我添加这些行,它不会发送数据 @Spy .. 它的 dataType 不是 type .. 再试一次,给我看你的新代码。 我编辑了代码。我添加了这些行,如果我删除 contentType 行,它只会发送数据。但它仍然可以将它们保存在数据库中 在将它们保存到数据库之前回显它们怎么样,它也有问题吗? .. 告诉我来自 ajax 帖子的标题是否正确。 当我添加你的行时,它不会进行重定向。我无法回应他们【参考方案2】:

尝试使用 serializeArray() 从帖子数据创建 JSON。添加了一个用于调试的 console.log。

 $('.submitBtn').click(function(e) 
     e.preventDefault();
     var sdata = $('#add_name').serializeArray();
     console.log(fdata);
   $.ajax(
       url:'',
       method:"POST",             
       data:fdata,
       type: 'json',
       success:function(data)
       
         i=1;
         var spot = document.getElementById('spot_name').value;
         window.location.href = "<?php echo base_url("index.php/Spot_preview/spot_preview/");?>"+spot;
       
      );
 )

【讨论】:

以上是关于ajax 发布后的 Phpmyadmin 奇怪的字符的主要内容,如果未能解决你的问题,请参考以下文章

phpmyadmin 自动递增主键行为奇怪

Ajax phpmyadmin 替代方案? [关闭]

将数据库导入 PhpMyAdmin 时出现奇怪的错误

phpmyadmin 显示奇怪的字符(utf8)

PhpMyAdmin 正在将 varbinary 导出为奇怪的字符而不是 HEX

PHP:如何访问 phpMyAdmin / php.ini 和 extension_dir 之间的奇怪冲突