2010-06-06 41 views
1

我有一个简单的HTML表单,用POST函数提交信息。但是当信息包含一个西里尔文字符时,在MySql中的表格中就会变成ааааза符号而不是文本。该表位于utf-8_general_ci上,该网站使用UTF-8编码。我想象这个表的结果与POST与SQL函数编码问题的简单HTML表单?

$query = " 
    SELECT ".$db->nameQuote('ingredients')." 
    FROM ".$db->nameQuote('other')." 
    ORDER by id DESC 
    "; 
$db->setQuery($query); 
$ingredients = $db->loadResult(); 

我不能理解如何告诉窗体发送正确的字体。或者问题在哪里?如何正确获取这些字符?或者如何正确发送它们?

-----------------编辑-----------------------

我不明白哪里放

mysql_query("SET CHARACTER SET utf8"); mysql_query("SET NAMES utf8");

所以我在这里贴上我的代码。首先,简单的形式:

<form action="insert.php" method="post" onsubmit="return checkForm(this)" target="_top"> 
<table> 

<tr> 
<td colspan="2"> 
<ul> 
<li> Добавете необходимите за рецептата съставки</li> 
<li> Моля попълнете всички полета коректно</li> 
<li> Полетата маркирани с (*) са задължителни</li> 
</ul> 
</td> 
</tr> 

<tr> 
<td> 
Количество (порции)*: 
</td> 
<td> 
<input type="text" name="quantity" /> 
</td> 
</tr> 

<tr> 
<td> 
Съставки*: 
</td> 
<td> 
<input type="text" name="ingredients" /> 
</td> 
</tr> 

<tr> 
<td> 
Време за приготвяне*: 
</td> 
<td> 
<input type="text" name="timing" /><br /> 
</td> 
</tr> 

<tr> 
<td></td> 
<td> 
<input type="submit" value="Напред" class="button validate" /> 
</td> 
</tr> 
</table> 
</form> 

而且我insert.php文件中的取语法:

$query = " 
    SELECT ".$db->nameQuote('quantity')." 
    FROM ".$db->nameQuote('other')." 
    ORDER by id DESC 

    "; 
$db->setQuery($query); 
$quantity = $db->loadResult(); 

$query = " 
    SELECT ".$db->nameQuote('ingredients')." 
    FROM ".$db->nameQuote('other')." 
    ORDER by id DESC 
    "; 
$db->setQuery($query); 
$ingredients = $db->loadResult(); 

$query = " 
    SELECT ".$db->nameQuote('timing')." 
    FROM ".$db->nameQuote('other')." 
    ORDER by id DESC 
    "; 
$db->setQuery($query); 
$timing = $db->loadResult(); 
+0

你的查询不能只是'$ query =“选择数量,成分,时间从其他订单编号DESC”;'? – 2010-06-06 20:35:27

+0

$ db-> setQuery('SET CHARACTER SET utf8; SET NAMES utf8;'); $ db-> loadResult(); (如果这不起作用,请分别发出命令) – Robus 2010-06-07 17:25:59

回答

1

尝试设置的搭配?

mysql_query("SET CHARACTER SET utf8"); 
mysql_query("SET NAMES utf8"); 
+0

对不起,但我不知道该把代码放在哪里?在我的html文件中包含表单,或者当我从数据库中获取数据? – Spoonk 2010-06-06 20:04:45

+0

只有其中之一就够了 – 2010-06-06 20:05:40

+0

@Spoonk无处不在。只需将其添加到您的连接语句所在的位置即可。每次连接到数据库时,都要执行“SET NAMES utf8”查询,并使用通常的函数来运行mysql查询。 – 2010-06-06 20:12:05

0

азазаза显示出来,因为你解释包含азазаза为ISO-8859-一个UTF-8字节流1。确保将客户端编码设置为UTF-8,以便数据库知道您正在向其发送UTF-8字节流。

问题的声明

SET NAMES UTF8 
+0

我不知道该怎么做......请执行此操作...请参阅我的问题的编辑!在此先感谢 – Spoonk 2010-06-06 20:22:10

0

仔细检查您的数据库。我已经使用了utf8_unicode_ci排序俄罗斯,爱沙尼亚语(元音变音)等,并确保表格以UTF-8发布,没有问题。

如果你继续这样一些多字节的PHP中的硬编码UTF-8的东西,它是最好的,以确保内部PHP编码是合适的,以及:

mb_internal_encoding("UTF-8"); 
mb_http_output("UTF-8"); 
ob_start("mb_output_handler"); 

是的,正如你们在这里说,我M还采用

@mysql_query("SET NAMES 'utf8'"); 

数据库类有条件的MySQL 4.x的,但不为MySQL 5,做工精细那里,据报道为4.1,如果我没有记错的错误。

+0

应该始终使用SET NAMES,无论版本 – 2010-06-06 20:09:01

0

你必须在你的$ db类中只有一个查询,SET NAMES之一,在选择db语句之后。 使用不是mysql_query()函数,而是用于执行所有其他查询的函数。

你可以在这里发布你的db类中使用的连接语句吗?

0

您的问题可能是browser而不是数据库。在将其插入数据库之前,您应该将其字符串转换为utf8以确保。