阿贾克斯搞乱了挪威人物

时间:2009-04-02 11:09:42

标签: php javascript character-encoding

我正在尝试从<textarea>获取值并通过XMLHttpRequest将其传递到将内容添加到数据库的PHP页面。

但是,当它到达数据库时,“åæø”字符将转换为“Ã¥Ã|Ô。

我搜索过高和低并尝试更改为UTF-8,尝试使用htmlentities() / htmlspacialchars()等JavaScript版本,但无论我尝试做什么,结果都是总是一样。

我的页面设置为iso-8859-15,同样是请求的requestType。

因为我在工作中没有太多使用Ajax,所以我从网上剪下了设置程序。它看起来像这样:

var page_request = false;
var contentType = "application/x-www-form-urlencoded;charset=iso-8859-15";  

if (window.XMLHttpRequest)
{
  page_request = new XMLHttpRequest();
}

// If the Browser is Internet Explorer
else if (window.ActiveXObject)
{
  try
  {
    page_request = new ActiveXObject("Msxml2.XMLHTTP");
  }
  catch (e)
  {
    try
    {
      page_request = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (e){}
  }
}
else 
{ 
  return false; 
}

page_request.open('POST', url, true);
page_request.setRequestHeader("Content-Type", contentType);
page_request.send(query);

但是,在接收端和数据库中的PHP文件中,将转换特殊字符。

非常感谢任何帮助!我花了大部分时间试图解决这个错误......

3 个答案:

答案 0 :(得分:1)

你的charset delcaration撒谎。说内容是在ISO中并不神奇地使它成为ISO。

您的query变量似乎采用UTF-8编码。这是可以预料到的,因为Javascript字符串总是Unicode,并且像encodeURIComponent()这样的函数(正确格式化GET和POST请求所需的)使用UTF-8。

恕我直言,最好的办法就是永远停止使用ISO编码。

如果你还不能这样做,你需要自己在Javascript中序列化数据,或者在服务器上接收发布的数据时将UTF-8转换为ISO。

答案 1 :(得分:0)

您需要在encodeURIComponent内容上使用textarea。并使用UTF-8。

答案 2 :(得分:-2)

首先,这个网站支持语法高亮,但只有选择代码并点击小101 | 010符号。

其次,我会推荐ISO-8859-1,但我不是说保证会有效......