从AJAX获取错误的charset输出

时间:2015-11-28 22:22:07

标签: php jquery ajax utf-8

当我想打印出从服务器中获取的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"并没有帮助。

CODE: 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');
  }
 });

});

3 个答案:

答案 0 :(得分:1)

您需要在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

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

答案 1 :(得分:1)

尝试更改以下内容..

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。这就是问题所在。

因此,需要一些信息来确定您要发送的内容以及使用此数据的接收结果是什么?

答案 2 :(得分:0)

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

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

这应解决问题!