使用json_encode通过xmlhttp.responseText发送特殊字符(即caron)

时间:2012-09-11 16:16:47

标签: php javascript ajax json

我正在尝试从数据库中获取带有特殊字符(caron)的数据,并使用json_encode通过xmlhttp.responseText发送它以填充文本框。与包含特殊字符(caron)的数据关联的特定文本框不显示任何内容。其他文本框正在显示正确的数据。我尝试使用Javascript函数encodeURIComponent,但在文本框中只显示null。任何帮助将不胜感激。

主页代码:

function loadDoc()
{
   var xmlhttp;

   // code for IE7+, Firefox, Chrome, Opera, Safari
   if (window.XMLHttpRequest)
   {
      xmlhttp=new XMLHttpRequest();
   }
   // code for IE6, IE5
   else
   {
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }

   xmlhttp.onreadystatechange=function()
   {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
      {
         var a = JSON.parse(xmlhttp.responseText);
         document.getElementById("textbox").value=a.first;
         document.getElementById("textbox2").value=a.second;
         document.getElementById("textbox3").value=a.third;
         document.getElementById("textbox4").value=a.fourth;
         document.getElementById("textbox5").value=a.fifth;
         document.getElementById("textbox6").value=a.sixth;
      }
   }

   xmlhttp.open("GET","loadTextBox.php?id=4",true);
   xmlhttp.send();
}

loadTextBox.php代码:

<?php
header("Content-type: application/json");

---Placeholder for correct DB login info---

$result = $mysql->query(---Placeholder for correct SQL query---);

while ($row = $result->fetch_object())
{
   $queryResult[] = $row->colun_one;
}
$textboxValue = $queryResult[0];
$textboxValue2 = $queryResult[1];
$textboxValue3 = $queryResult[2];
$textboxValue4 = $queryResult[3];
$textboxValue5 = $queryResult[4];
$textboxValue6 = $queryResult[5];
echo    
json_encode(array('first'=>$textboxValue,'second'=>$textboxValue2,
'third'=>$textboxValue3,'fourth'=>$textboxValue4,'fifth'=>$textboxValue5,
'sixth'=>$textboxValue6));
?>

2 个答案:

答案 0 :(得分:0)

在发送之前使用UTF-8对它们进行编码。

utf8_encode($variable);

或尝试array_map();对数组进行编码;

$textboxValue = $queryResult[0];
$textboxValue2 = $queryResult[1];
$textboxValue3 = $queryResult[2];
$textboxValue4 = $queryResult[3];
$textboxValue5 = $queryResult[4];
$textboxValue6 = $queryResult[5];
$arrayToEncode = array('first'=>$textboxValue,'second'=>$textboxValue2,
'third'=>$textboxValue3,'fourth'=>$textboxValue4,'fifth'=>$textboxValue5,
'sixth'=>$textboxValue6);
$encodedArray = array_map('utf8_encode', $arrayToEncode);
echo json_encode($encodedArray);

您可能还需要将xmlhttp.request设置为utf-8

xmlhttp.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
xmlhttp.open("GET","loadTextBox.php?id=4",true);
xmlhttp.send();

您可能需要尝试一种或另一种,甚至两种。您还想确认您的数据库是否能够存储特殊字符,如果数据库没有存储特殊字符,那么您的应用程序将无法让它们对它们进行编码。

答案 1 :(得分:0)

添加行$ mysql-&gt;查询(“SET CHARACTER SET'utf8'”);在连接到DB之后和SQL查询修复之前的loadTextBox.php里面。