1

我有两个页面,我使用 AJAX 来完成一些任务而不刷新页面。问题是当我使用 Internet Explorer 时,我得到的值为“?”。我尝试做的是有一个目录,当用户点击一个字符时,另一个页面正在执行 SQL 任务,第一页显示结果。

第一页:

<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script>
function loadXMLDoc(myLink)
{
alert ("OK");
var xmlhttp;
alert (myLink);
if (window.XMLHttpRequest)
  {
  xmlhttp=new XMLHttpRequest();
  }    
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4)
    {
    document.getElementById("information").innerHTML=xmlhttp.responseText;
    }
  }      
xmlhttp.open("GET","select.php?data=" + myLink,true);
xmlhttp.send();
}
</script>    
</head>
<body>
<center>
<font size = "4">     
 <a href = "#" onClick = "loadXMLDoc('Ι'); return false;">Ι </a>      
 </font>
</center>    
<div id = "information">
</div>
</body>
</html>

第二页:

<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>    
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<?php
//var_dump($_GET);
//exit();
session_start();
$find = $_GET["data"];
$find = iconv("utf8", "utf8", $find);
echo "New find = " . $find;
$find = iconv("utf8", "utf8", "Ι"); //Greek character
echo "<br/>Newest find = " . $find;
?>

第一个“echo”将打印一个问号(“?”),而第二个将打印正确的字符。该问题仅出现在 Internet Explorer 上,它适用于任何其他问题。如果我使用“var_dump”,我会得到:

Internet Explorer:array(1) { ["data"]=> string(1) "?" }

Chrome 和 Mozilla:array(1) { ["data"]=> string(2) "Ι" }

AJAX 完全没有问题。

请问有什么帮助吗?

4

1 回答 1

0

我发现避免此类问题的最佳方法是对所有特殊字符实际使用 HTML 实体。

http://www.w3.org/TR/html4/sgml/entities.html

因此,如果您想要 alpha,请使用 Α 而不仅仅是在您的代码中粘贴一个 alpha。但是,如果您从数据库加载文本,则需要查看字符代码并转换为实体。但这很容易,因为 HTML 实体将始终作为 & 符号,后跟井号,然后是字符代码值,然后是分号。

于 2013-08-09T20:19:00.660 回答