2010-05-30 136 views
-1

我正在通过一个小小的PHP脚本将数据从as3推送到MSQL!MYSQL突出显示为%E9

我的问题是,所有我强调的字符显示为怪异的iso字符。

例:E是显示%E9

Obvisously我场的排序规则设置为utf8_general_ci

即使当我试图从没有AS3一个简单的PHP脚本插入数据,我得到的同样的错误。

<?php 

mysql_connect("***", "***", "***") or die("Error :" .mysql_error()); 
mysql_select_db("***"); 


$query ="INSERT INTO test (message) values ('éèàïû')"; 

mysql_query($query) or die("Error updating DB"); 


?> 

任何想法,我在做什么错,我该如何解决这个问题?

在此先感谢。

jk_

回答

1

时间在这种情况下,问题可能在于一些地方:保证UTF8输入兼容性,你必须在几个地方检查输入:

  1. 如果你获得从表单中的数据,请确保你的国家,你正在使用的字符集是由服务器规定(例如,通过AddCharset上Apache)或更好,用<meta http-equiv="Content-Type" content="text/html; charset=utf-8">的状态表示NT。请注意,如果服务器声明编码为latin1并且PHP将其设置为utf8,则显示可能是错误的。因此,强烈建议您使用内置标头元标记。

  2. 在您的PHP配置中,尝试使用行default_charset = "utf8"。这应该是默认的,但只是检查。这将控制输出字符集,如果这不符合Apache服务器或页面字符集,则utf8可能会以ASCII形式输出,从而导致您的问题。如果您无法访问php.ini,请使用ini_set在共同包含的文件中设置此选项。

  3. 确保在连接到MySQL后执行mysql_set_charset('utf8');。这很重要,因为它可以连接到MySQL到UTF8。如果你不这样做,你的已经UTF8编码的PHP字符串可能会再次被编码到MySQL数据库中。这导致了一个称为双重编码的问题。 编辑:尽管一些答案建议使用SET NAME,但不建议在PHP文档中使用

  4. 请将您的数据库,表格和列字符集都设为utf8。我想你已经覆盖了这个。

如果你这样做,你的应用程序应该可以正常使用PHP函数,尽管各种库可能会搞砸了。

+0

感谢您的回答!问题是我将数据从flash(as3)推送到服务器上的php文件。在同一个php文件中,如果我替换$ _GET ['Query']; (这是指从Flash中的字符串)由相同的字符串直接在PHP的作品!所以这是一个AS3和PHP之间的问题,而不是PHP和MySQL之间。 – 2010-05-30 07:01:31

+0

嗯,从我所了解的AS3中,可能会有一个'escape($ value);'语句在AS3的某个地方被调用。解决这个问题的一种方法就是在将任何输入发送到数据库之前,对来自Flash的任何输入执行'urldecode($ value);'。 *编辑:*请注意,这可能会弄乱+符号,因为urldecode将它们转换为空格。 – phsource 2010-05-30 16:26:28

0

mysql不会urlencode你的数据。一些你的代码做到了。 可能在选择时间。

除了这个问题,你应该发出一个SET NAMES <encoding>查询每次连接到数据库,其中<encoding>是你的HTML网页的编码

+0

谢谢!现在只有在使用php文件时才有效。但是,当我从as3传递查询时它不起作用。我必须弄清楚为什么。奇怪的。 – 2010-05-30 06:34:41

+0

@ JK-你会得到urlencoded数据。所以,先rawurldecode()。 – 2010-05-30 07:24:16