无法保存12÷5等数据

时间:2009-10-30 14:45:45

标签: php jquery ajax

我有以下数据使用php

保存在数据库中

我的数据是:12 ÷ 5

我有以下代码:

  $.ajax({
    type: "POST",
    url: "add_proc.php",
    data: "topic="+ encodeURIComponent(field1)

当我在firebug中检查field1的值时,它与12 ÷ 5相同,但当值保存在数据库中时,它是12 ÷ 5

     $topic=mysql_escape_string($_POST['topic']);
      echo($topic); 

即使我在发布后回显变量的值,我也会得到12 ÷ 5

我无法弄清问题在哪里?

3 个答案:

答案 0 :(得分:2)

÷采用UTF-8编码 - http://www.fileformat.info/info/unicode/char/00f7/

#pseudo
utf8('÷')    => 'Ã' + '·'
utf8(0x00F7) => 0xC3, 0xB7

您可以使用utf8_decode(我猜测编码来自$_POST):

$topic = mysql_escape_string(utf8_decode($_POST['topic']));

确保您的数据库/表格有Unicode/UTF-8 support

或者,在页面中保留编码并且只使用echo UTF-8编码(如Ates Goral建议的那样),以便浏览器为您处理解码。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

答案 1 :(得分:1)

肯定是编码问题。这就是原因。

除法符号(U+00F7)以UTF-8编码为2个字节,0xC3和0xB7。

但在ISO-8859-1(和许多其他编码)中,这些字节分别是两个独立的字符:U+00C3U+00B7

所以某处在这个过程中你的UTF-8编码分区符号被解码为其他编码(最有可能是ISO-8859-1)。

查看PHP UTF-8 Cheatsheet作为开始。如果您完成所有这些步骤但仍有问题,请告诉我,我会看到我可以做些什么来帮助。

答案 2 :(得分:0)

确保输入HTML页面的内容编码为UTF-8。这样,PHP就会知道它收到的内容是UTF-8。

您可以通过在文档的头部嵌入以下内容来完成此操作:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

更新:还要确保您正在生成的HTML(echoinging)也会将UTF-8报告为内容编码。一旦你的回声工作,下一步是确保你的DB也期望/存储UTF-8。