【问题标题】:Trouble with AJAX encodingAJAX 编码问题
【发布时间】:2013-08-03 03:17:28
【问题描述】:

我的 AJAX 编码有问题。

我有一个丹麦基金会的网站 - 这些基金会的名称包括特殊字符“Æ”、“Ø”和“Å”。当我在下拉菜单中进行过滤时,特殊字符会显示为“?”。

JavaScript:

function findLegater(val1, val2, val3) {

var stu = document.getElementById(val1).value
var ud = document.getElementById(val2).value
var kva = document.getElementById(val3).value

if (stu=="N" && ud =="0" && kva =="0") {
document.getElementById("txtHint").innerHTML="";
}
else {
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else {// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
}

xmlhttp.open("GET","getlegat.php?s="+stu+"&u="+ud+"&k="+kva,true);
xmlhttp.send();
}
}

PHP 接收数据:

$s=$_GET["s"];
$u=$_GET["u"];
$k=$_GET["k"];

include 'msql/msql-connect.php'; 

if ($s!= "N" && $u != "0" && $k!="0") {
$query = "SELECT * FROM legater WHERE studiegrad LIKE '%$s%' and studie LIKE '%$u%' and                  kvartal LIKE '%$k%'";
}
else if ($s!= "N" && $u == "0" && $k=="0")  {
$query = "SELECT * FROM legater WHERE studiegrad LIKE '%$s%'";
}
else if ($s!= "N" && $u != "0" && $k=="0")  {
$query = "SELECT * FROM legater WHERE studiegrad LIKE '%$s%' and studie LIKE '%$u%'"; 
}
else if($s== "N" && $u != "0" && $k=="0")  {
$query = "SELECT * FROM legater WHERE studie LIKE '%$u%'";
} 
else if($s== "N" && $u != "0" && $k!="0")  {
$query = "SELECT * FROM legater WHERE studie LIKE '%$u%' and kvartal LIKE '%$k%'"; 
} 
else if($s== "N" && $u == "0" && $k!="0")  {
$query = "SELECT * FROM legater WHERE kvartal LIKE '%$k%'";
} 
else if($s!= "N" && $u == "0" && $k!="0")  {
$query = "SELECT * FROM legater WHERE studiegrad LIKE '%$s%' and kvartal LIKE '%$k%'"; 
} 

// Execute query
$result = mysql_query($query) or die ("Error in" . $query);
$number = mysql_num_rows($result);

// Check result
if ($number == 0) {
  echo "Ingen legater fundet";
}
else {
  while ($row = mysql_fetch_array($result)) {
    echo "<li><a href=\"legat.php?id=" . $row['id'] . "\">" . $row['navn'] . "</a>    </li>";
  }
}

// free result set memory
mysql_free_result($result);

// close connection
mysql_close($connection);

最后,这是我的 HTML 标题:

<meta charset="UTF-8">

我不知道如何修复这些字符。我做了以下事情:

  • 检查了我的本地主机(我目前用于测试)是否使用 UTF-8
  • 确保我的 HTML 具有 UTF-8 元字符集
  • 我的所有文件都是在 Notepad++ 中创建的 - 我已确保所有文件都正确创建为 UTF-8(无 BOM)

非常感谢所有帮助!

【问题讨论】:

  • 你选择数据库后使用mysql_query("SET NAMES 'utf8'");了吗?如果不是,这可能是原因
  • 不久前我遇到了一个非常相似的问题,微软的单词大引号转换为问号。当我将数据插入数据库时​​,我通过使用htmlentities($string, ENT_QUOTES, 'UTF-8') 解决了这个问题。从那里我不必做任何特别的事情来正确输出它。我知道这不是您问题的确切答案,但希望它可以帮助
  • Akam,您的解决方案奏效了!非常感谢。我现在可以再次睡觉了。

标签: php javascript html ajax encoding


【解决方案1】:

试试这个看看会发生什么

 while ($row = mysql_fetch_array($result)) {
   $xxx .="<li><a href=\"legat.php?id=" . $row['id'] . "\">" . $row['navn'] . "</a>    </li>";
 }


echo utf8_encode($xxx);

附带说明:Mysql_* 扩展自 PHP 5.5.0 起已弃用,并将在未来删除。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。

一个有用的链接Why shouldn't I use mysql_* functions in PHP

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2011-04-13
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多