0

我在通过 AJAX 和 jQuery 显示重音字符时遇到问题。我会更详细地解释它。

我有一个页面,其中有一个input字段。当我用 4 个字符(必须是机场的 ICAO 代码)填充该字段时,它会通过 AJAX 调用 PHP 脚本。脚本如下:

文件: ajax.airport.php

<?php
    include("mysqlexec.inc.php");
    include("functions.inc.php");

    if(isset($_GET['icao'])){ 
        $airportData = GetAirportInfo($_GET['icao']);  

        if (!empty($airportData["Name"])) {
            echo $airportData["Name"];
        } else {
            echo "Not found!";
        }
    }
?>

该函数向显示机场名称的Our Airports网站GetAirportInfo();发出 HTTP 请求。如果您可以查看此示例页面,您可能会注意到 ICAO 代码是SBGL,它是由用户输入的,并且函数(它是数组的元素)的返回将是Galeão-Antônio Carlos Jobim Intl,带有一些重音字符。inputGetAirportInfo();

问题是,当在文件中回显此内容时,却出现了 Gale�o - Ant�nio Carlos Jobim Intl

所有文件都是UTF-8(没有 BOM)。我尝试了几个函数(PHP 和 JS 类型),但都没有成功。

在输入上执行的 jQuery 函数是这样的:

function showAirport(icao, dest) {
    var icao=icao.toUpperCase();

    if (icao.length < 4) {
       $("#"+dest).html("");
    } else {
       $("#"+dest).html('<img src="images/loadingsm.gif"/>');
       $.ajax({
           type    : "GET",
           url     : "ajax.airport.php",
           dataType: "html",
           data    : { icao: icao },
           success : function (result) {
               $("#"+dest).html(result);
           },
       });
    }
};

欢迎任何帮助。

4

2 回答 2

0

有检查 contentType 属性

function showAirport(icao, dest) {
var icao=icao.toUpperCase();

if (icao.length < 4) {
   $("#"+dest).html("");
} else {
   $("#"+dest).html('<img src="images/loadingsm.gif"/>');
   $.ajax({
       type    : "GET",
       contentType: "text/xml;charset=utf-8",
       url     : "ajax.airport.php",
       dataType: "html",
       data    : { icao: icao },
       success : function (result) {
           $("#"+dest).html(result);
       },
   });
}

};

于 2013-04-12T15:06:18.580 回答
0

我认为您应该$airportData["Name"]在 ajax.airport.php 回显之前进行编码,在json_encode()ajax 数据回显之前使用。其他一些语言需要浏览器可以识别的编码

include("mysqlexec.inc.php");
include("functions.inc.php");

if(isset($_GET['icao'])){ 
    $airportData = GetAirportInfo($_GET['icao']);  

    if (!empty($airportData["Name"])) {
        echo json_encode($airportData["Name"]);
    } else {
        echo "Not found!";
    }
}
于 2013-04-12T15:11:03.863 回答