我有以下数据使用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
。
我无法弄清问题在哪里?
答案 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+00C3和U+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。