Web应用程序显示'é'为

时间:2013-05-15 15:10:17

标签: javascript mysql ajax character-encoding

我正在开发一个Web应用程序,它是PHP,HTML,Javascript,AJAX,JQuery中的代码。

它链接到MySQL数据库。

问题在于:

DataBase中的大部分文字都是法语,一些特殊字符如“é”,“ù”,“à”在我的页面上显示为 。

N.B。为了提供更多信息,如果我在我的应用程序中的表单上输入“é”,它会在我的数据库'Ã'中写入,如果我在我的数据库中插入'é',它会在我的应用程序中显示为 。

进一步的信息: 首先,'é'显示正确。但是在我有一个AJAX函数从DataBase刷新它然后它变成了

AJAX代码:

function getXMLHttpRequest()
    {
        var xhr = null;

        if (window.XMLHttpRequest || window.ActiveXObject)
        {
            if (window.ActiveXObject)
            {
                try 
                {
                    xhr = new ActiveXObject("Msxml2.XMLHTTP");
                } 
                catch(e)
                {
                    xhr = new ActiveXObject("Microsoft.XMLHTTP");
                }
            } 
            else
            {
                xhr = new XMLHttpRequest(); 
            }
        } 
        else
        {
            alert("Votre navigateur ne supporte pas le format des données en temps réel...");
            return null;
        }
        return xhr;
    }

    function request()
    { 

        var xhr = getXMLHttpRequest();
        xhr.onreadystatechange = function()
                                {
                                    if(xhr.readyState == 4 && (xhr.status == 200 || shr.status == 0))
                                    {
                                        readData(xhr.responseXML);
                                    }
                                };
        xhr.open("POST", "handlingData.php", true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.send(null);
    }

    function readData(Data)
    {   
        var XMLtr = Data.getElementsByTagName('tr');

        for(var i = 0; i < XMLtr.length; i++)
        {
            var HTMLtr = document.getElementById(XMLtr[i].getAttribute('id'));

            if(HTMLtr != null)
            {
                var XMLtd = XMLtr[i].getElementsByTagName('td');

                for(var e = 0; e < XMLtd.length; e++)
                {
                    var HTMLtd = HTMLtr.cells[e];
                    var HTMLtdReplace = document.createElement('td');
                    HTMLtdReplace.setAttribute('id', XMLtd[e].getAttribute('id'));
                    var InnerHTML = document.createTextNode(XMLtd[e].getAttribute("value"));
                    HTMLtdReplace.appendChild(InnerHTML);

                    HTMLtr.replaceChild(HTMLtdReplace, HTMLtd);
                }
            }
        }
    }

代码的reste只是一个带PHP的简单HTML表:

<body  onload="var int = self.setInterval(function(){request(readData);}, 1000);">
    <div id="divWrapper">
        <div id="divBgd">
        <?php
            if($_SESSION['User'] == null || !isset($_SESSION['User']))
            {
                header("Location: ../Index.php");
            }
            include("Header2.php");
            include("Navigation.php");
            include("divData.php");
            echo "<div style='clear: both;'></br></div>";
            echo "<div style='clear: both;'></br></div>";   
        ?>
        </div>
        <div style='clear: both;'></br></div>
    </div>
    <div style='clear: both;'></br></div>
</body>

这是divData.php:

<div id="divData">
<table id="tblData" name="tblData">
    <tr>
        <th>Description</th>
        <th>Données</th>
        <th>Unitées</th>
        <th>Dernière mise à jour</th>
    </tr>
    <?php 
    $cn = new cConnexion("127.0.0.1", "app_windows", "root", "jrt12345");

    if($cn->DBConnexion())
    {
        $getData = $cn->Select("SELECT rtd_dateTime, rtd_tagId, rtd_value, tag_description, tag_units FROM realTimeData INNER JOIN tag ON tag.tag_id = realTimeData.rtd_tagId INNER JOIN plc ON plc.plc_id = tag.tag_plcId WHERE plc_id = ".$_SESSION['PLC']." AND tag_realTimeData = 1 AND tag_alarmeData = 0");

        if($getData != null)
        {       

            while($Data = $getData->fetch())
            {
                echo '<tr id="'.$Data['rtd_tagId'].'">';
                    echo '<td id="Description">'.$Data['tag_description'].'</td>';
                    echo '<td id="Value">'.$Data['rtd_value'].'</td>';
                    echo '<td id="Units">'.$Data['tag_units'].'</td>';
                    echo '<td id="Date">'.$Data['rtd_dateTime'].'</td>';
                echo '</tr>';
            }
        }
    }
?>
</table>
<a id="cmdRetour" href="Accueil.php">Accueil</a>

谢谢!

2 个答案:

答案 0 :(得分:1)

尝试为AJAX请求设置charset:

xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

您可以将“UTF-8”替换为您正在使用的特定字符集。

答案 1 :(得分:0)

在AJAX调用脚本中,不要“按原样”echo响应,特别是如果您在HTML和数据库中使用不同的字符集。

将回复存储在$response变量中并致电echo iconv($db_charset, $html_charset, $response);以返回回复。