从AJAX获取错误的字符集输出


Getting wrong charset output from AJAX

当我想打印jQuery AJAX的输出时,它已经从服务器接收到了。它没有显示正确的字符集。我想要的是得到Š,而不是得到?。所有文件script.js和服务器php proceed.php都以UTF-8保存并设置为UTF-8。数据库也设置为UTF-8。大多数东西我都试过了。在AJAX的.js文件中:

  $.ajaxSetup({
    url: "proceed.php", //file to procces data
    ContentType : 'charset=UTF-8', // tried here
    global: false,
    type: "POST", 
    dataType: "html"
});

.php文件中:

mysql_query("SET NAMES utf8");
$output = utf8_decode($sql_result);

所有可能的组合。

更新:我已经在所有可能的变体中尝试了所有提出的方法,通过使用它们,我不会从服务器得到任何响应。我唯一一次得到至少soem响应是通过上面提到的设置——从字面上讲。设置AJAX dataType: "text/html"dataType: "application/html"都没有帮助。

代码:PHP

if(!empty($_POST['select_had'])){
$zem = $_POST['select_had'];
$vysledek = mysql_query("SELECT typ_hadanky, jazyk FROM hlavolam RIGHT JOIN hadanka ON hlavolam.id_hlavolamu=hadanka.id_hlavolamu WHERE zeme_puvodu='$zem'");
$out = "";
while ($zaznam = mysql_fetch_array($vysledek)) {
    $zaz = $zaznam['jazyk'];
    $out .= "<option>".$zaz."</option>";
}
$vys = utf8_decode($out);
echo $vys;

}

jQuery:

$("#sel_had_zem").change(function(){
var select_had = $("#sel_had_zem option:selected").text();
console.log(select_had);
$.ajax({
  data:{'select_had':select_had},
  success: function(data){
      console.log(data);
      $("#sel_had_jaz option").nextAll().remove();
      $("#sel_had_jaz").append(data);
  },
  error: function(){
      alert('No server response');
  }
 });
});

您需要在MySQL连接中而不是在MySQL查询中设置字符集。如果您使用MySQLi,那么您可以使用mysqli_set_charset()内置的PHP函数。然而,如果你使用PDO,那么你可以这样使用它:

new PDO('mysql:host=localhost;dbname=DBNAME;charset=utf8;', USERNAME, PASSWORD);

您可以在此处找到有关mysqli_set_charset()功能的更多信息:http://www.w3schools.com/php/func_mysqli_set_charset.asp

注意:请确保您已在HEAD标记中添加了<meta charset="UTF-8">

尝试更改以下内容。。

dataType: 'html'

dataType: 'application/html'

保留

contentType: 'charset=utf8'

并将<?php header('Content-Type: application/html; charset=utf8'); ?>添加到页面顶部。

对于错误报告,也将error_reporting(E_ALL);放在页面顶部。如果出现任何错误,请发布该行的代码,并在OP帖子中发布错误消息。

对于您的错误

Resource interpreted as Document but transferred with MIME type application/html

在您的请求标头中,您已经发送了Content-Type:html,这意味着您希望将响应解释为html。现在,即使服务器向您发送PDF文件,您的浏览器也会尝试将其理解为HTML。这就是问题所在。

因此,需要一些信息来了解你到底想发送什么,以及接收端对这些数据做了什么?

您希望将PHP页面的输出设置为UTF-8并更正MIME类型:

mysql_query("SET NAMES utf8");
header( 'Content-Type: text/html; charset=utf-8' );
echo $sql_result;
exit;

这应该可以解决问题!