0

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

它链接到 MySQL 数据库。

这是问题所在:

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

注意要提供更多信息,如果我在我的应用程序中的表单上输入“é”,它会在我的数据库“Ô中写入,如果我在我的数据库中插入一个“é”,它会在我的应用程序中显示为�。

更多信息:起初“é”显示正确。但是在我有一个从数据库刷新它的 AJAX 函数之后,它变成了一个 ...</p>

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);
                }
            }
        }
    }

其余的代码只是一个简单的 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>

谢谢 !

4

2 回答 2

1

尝试为 AJAX 请求设置字符集:

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

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

于 2013-05-15T16:33:41.910 回答
0

在称为 AJAX 的脚本中,不要echo“按原样”响应,尤其是当您在 HTML 和数据库中使用不同的字符集时。

将响应存储在$response变量中并调用echo iconv($db_charset, $html_charset, $response);以返回响应。

于 2013-05-15T15:16:46.413 回答